如何从PowerShell编写.CMD文件?

jwf*_*arn 12 powershell cmd

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

以下是我正在尝试做的一个例子.[为了比较,我也写了一个.CMD文件CMD.EXE并显示它工作正常]

在PowerShell中:

PS C:\> "@set BAR=1" > bar.cmd  // write to a .CMD file from PowerShell
Run Code Online (Sandbox Code Playgroud)

在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.
Run Code Online (Sandbox Code Playgroud)

我怀疑bar.cmd是用callin 不支持的编码创建的CMD.EXE.[虽然注意type显示bar.cmd当前编码的内容没有问题.]

什么是编程写入从PowerShell中.cmd文件,使得它可以从被调用的正确方法CMD.EXEcall

Jas*_*her 18

Set-Content bar.cmd '@set BAR=1' -Encoding ASCII
Run Code Online (Sandbox Code Playgroud)

PowerShell默认为UTF-16 LE.

精简版.

sc bar.cmd '@set BAR=1' -en ASCII
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以使用Out-File例如:`'@ set BAR = 1'| Out-File bar.cmd -enc ascii` (4认同)
  • 作为一般规则,我远离Out-File,因为它调用默认的控制台格式(这意味着自动换行等). (2认同)