如何从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.EXE
从call
调用该文件的正确方法? 最佳答案
Set-Content bar.cmd '@set BAR=1' -Encoding ASCII
PowerShell将默认为UTF-16 LE。
精简版。
sc bar.cmd '@set BAR=1' -en ASCII