2011-03-13 13 views
11

¿Cómo se escribe uno en un archivo .CMD (o .BAT) válido de PowerShell? Estoy usando el operador > pero cmd.exe no puedo ejecutar los archivos que creo.Cómo escribir archivos .CMD de PowerShell?

A continuación se muestra un ejemplo de lo que estoy tratando de hacer. [Para la comparación, también escribo en un archivo de .CMD CMD.EXE y demostrar que funciona bien]

En PowerShell:

PS C:\> "@set BAR=1" > bar.cmd // write to a .CMD file from PowerShell 

En 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. 

Sospecho que bar.cmd se está creando con una codificación no compatible con call en CMD.EXE. [Aunque aviso de que type tiene ningún problema para mostrar el contenido de bar.cmd en su codificación actual.]

Cuál es la forma correcta de escribir en un archivo mediante programación .CMD de PowerShell tal que puede ser invocado desde CMD.EXE con call?

Respuesta

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

PowerShell utilizará por defecto UTF-16 LE.

Versión corta.

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

que hace el truco, gracias! – jwfearn

+3

O puede usar Out-File, por ejemplo: ''@set BAR = 1' | Out-File bar.cmd -enc ascii' –

+0

tengo que amar la pipa, gracias Keith! – jwfearn

Cuestiones relacionadas