2012-09-01 20 views
5

Tengo un archivo por lotes que toma cualquier número de argumentos (lista de archivos) y ejecuta un script de PowerShell con la estructura siguiente comando:

"%POWERSHELL%" -Command "%SCRIPT%" %*

%POWERSHELL% es el camino a PowerShell.exe y %SCRIPT% es mi script de PowerShell que interpreta que recibe como %*$args. El problema es que si paso algo como el nombre de archivo test$file.name, PowerShell recibe test.name, presumiblemente porque $file se interpreta como una variable vacía.

¿Hay alguna manera de evitar cada argumento con comillas simples o repeticiones del script por lotes, o de lo contrario lidiar con esto?

Respuesta

5

Escape $ caracteres antes de pasar% * al script de PowerShell.

set ARGS=%* 
set ARGS=%ARGS:$=`$% 
"%POWERSHELL%" -Command "%SCRIPT%" %ARGS% 
+0

Funciona como un encanto - ¡No tenía ni idea de la notación de dos puntos! –

+0

¿Funcionaría la zanahoria '^' también? o es la cita de la izquierda un personaje especial en powershell? –

+2

@ hayk.mart: '% VAR: S1 = S2%' reemplaza las cadenas en las variables, ver 'help set' para más detalles. –

Cuestiones relacionadas