2012-09-01 5 views
5

Ho uno script batch che prende qualsiasi numero di argomenti (elenco dei file) ed esegue uno script PowerShell con la struttura seguente comando:

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

%POWERSHELL% è il percorso PowerShell.exe e %SCRIPT% è il mio script PowerShell che interpreta che riceve %* come $args. Il problema è che se passo qualcosa come il nome del file test$file.name, PowerShell riceve test.name, presumibilmente perché $file viene interpretato come una variabile vuota.

Esiste un modo valido per evitare ogni argomento con virgolette singole o apici inversi dallo script batch o gestirlo in altro modo?

risposta

5

Esci da caratteri $ prima di passare% * allo script di PowerShell.

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

Funziona come un incantesimo - Non avevo idea di quella notazione del colon! –

+0

Anche la carota '^' funzionerà? o è la virgoletta a sinistra un personaggio speciale in PowerShell? –

+2

@ hayk.mart: '% VAR: S1 = S2%' sostituisce le stringhe nelle variabili, vedi 'help set' per ulteriori dettagli. –