Как писать файлы .CMD из PowerShell?

Как писать в файл .CMD(или .BAT) из PowerShell? Я использую оператор >, но cmd.exe не может выполнить файлы, которые я создаю.

Ниже приведен пример того, что я пытаюсь сделать. [Для сравнения, я также пишу в .CMD файл из cmd.exe и показываю, что он отлично работает]

В PowerShell:

PS C:\> "@set BAR=1" > bar.cmd  // write to a .CMD file from PowerShell

В CMD.EXE:

C:\> echo @set FOO=1 > foo.cmd  // write to a .CMD file from CMD.EXE
C:\> type foo.cmd               // display .CMD file written from CMD.EXE
@set FOO=1                      // PASS
C:\> type bar.cmd               // display .CMD file written from PowerShell
@set BAR=1                      // PASS
C:\> call foo.cmd               // invoke .CMD file written from CMD.EXE
C:\> echo %FOO%
1                               // PASS
C:\> call bar.cmd               // invoke .CMD file written from PowerShell
C:\> ■@                         // FAIL
'■@' is not recognized as an internal or external command,
operable program or batch file.

Я подозреваю, что bar.cmd создается с кодировкой, не поддерживаемой call в cmd.exe. [Обратите внимание, что type не вызывает проблем с отображением содержимого bar.cmd в его текущей кодировке.]

Каков правильный способ программной записи в файл .CMD из PowerShell, так что он может быть вызван из cmd.exe с помощью call?

Ответ 1

Set-Content bar.cmd '@set BAR=1' -Encoding ASCII

PowerShell по умолчанию будет использовать UTF-16 LE.

Краткая версия.

sc bar.cmd '@set BAR=1' -en ASCII