2011-03-13 53 views
11

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

下面是我想要做的一个例子。 [为了比较,我也从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被调用的正确方法?

回答

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

PowerShell将默认为UTF-16 LE。

简短版本。

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

这样做的窍门,谢谢! – jwfearn 2011-03-13 04:03:12

+3

或者您可以使用Out-File例如:''@set BAR = 1'| Out-File bar.cmd -enc ascii' – 2011-03-13 04:07:19

+0

得爱管,谢谢Keith! – jwfearn 2011-03-13 04:24:40