Ho un semplice file .bat
%2 >file.tmp
set /p %1=<file.tmp
Mi aspetto di utilizzare questo script in questo modo:
putVar var1 command.bat
Dovrebbe ottenere la prima riga dell'output command.bat nella variabile var1 e successivamente dovrei essere in grado di utilizzare la variabile var1, per esempio
putVar var1 command.bat
echo %var1%
Purtroppo questo non funziona. Come ottenere questo lavoro? Forse c'è un modo più semplice?
risposte:
0 per risposta № 1Il tuo problema è che nel tuo codice di esempio il comando che stai eseguendo (command.bat
) è un file batch, che viene richiamato dall'interno di un file batch e se da un file batch si chiama un altro file batch senza utilizzare call
comando, quindi l'esecuzione non torna al batch chiamante.
Per mantenere la sintassi, è possibile utilizzare
(cmd /c "%~2")>file.tmp
set /p "%~1="<file.tmp
generando una seconda istanza di cmd
per gestire il comando, reindirizzando il suo output sul file temporaneo e quindi leggendo il file (solo la prima riga di command.bat
output) nella variabile.
Un modo più semplice di farlo è usare for /f
for /f "delims=" %%a in ("%~2") do set "%~1=%%a"
che, più o meno, fanno lo stesso lavoro. Esegui il comando recupera l'output e, in questo caso, scorre l'output del comando, assegnando ciascuna delle righe di command.bat
output alla variabile. Ovviamente, solo l'ultima riga verrà memorizzata all'interno della variabile, poiché il ciclo sovrascriverà il suo valore in ogni iterazione.