如何从PowerShell中写入有效的.CMD(或.BAT)文件?我正在使用>运算符,但cmd.exe无法执行我创建的文件。

以下是我要执行的操作的示例。 [为了进行比较,我还从CMD.EXE写入了.CMD文件,并表明它可以正常工作]

在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的内容时没有问题。]

什么是从PowerShell中以编程方式写入.CMD文件,以便可以使用CMD.EXEcall调用该文件的正确方法?

最佳答案

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

PowerShell将默认为UTF-16 LE。

精简版。
sc bar.cmd '@set BAR=1' -en ASCII

10-07 19:09
查看更多