如何从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
在显示当前编码中的CMD.EXE
内容时没有问题。]
以编程方式从PowerShell写入.CMD文件的正确方法是什么,以便可以call
使用{{1}}调用它?
答案 0 :(得分:18)
Set-Content bar.cmd '@set BAR=1' -Encoding ASCII
PowerShell默认为UTF-16 LE。
短版。
sc bar.cmd '@set BAR=1' -en ASCII