2011-03-13 74 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