2016-02-23 9 views
5

So come reindirizzare un comando shell di Windows con gli operatori >|>>|<|<<, ma non riesco a farlo per i comandi utilizzati all'interno di un comando FOR?Come reindirizzare un comando FOR nel lotto di Windows

Per esempio:

for /f "usebackq tokens=*" %%I in (`__COMMAND__ 2>nul`) do (
    set MYVAR=%%I 
) 

Vedete, qui vorrei silenziosa stderr di questo __COMMAND__. La shell si lamenta che non si aspetta un 2 in quel luogo (lo stesso comportamento per altri reindirizzamenti).

Chiunque può aiutare qui?

risposta

5
for /f "usebackq tokens=*" %%I in (`__COMMAND__ 2^>nul`) do (
    set MYVAR=%%I 
) 

in this case di reindirizzamento e di esecuzione condizionale operatori hanno bisogno di essere scappato con accento circonflesso.

O mettere tutto tra virgolette:

for /f "usebackq tokens=*" %%I in (`"__COMMAND__ 2>nul"`) do (
    set MYVAR=%%I 
) 

Utilizzando delayed expansion è anche possibile:

@echo off 

setlocal enableDelayedExpansion 

set "command=__COMMAND__ 2>nul" 

for /f "usebackq tokens=*" %%I in (`!command!`) do (
    set MYVAR=%%I 
) 
+0

Funziona! Questa sarà probabilmente la risposta più esaustiva possibile per questa stupida domanda, quindi accetterò ora. Grazie @npocmaka! – Campa

Problemi correlati