/ / Mettere il file di output in var - batch-file, cmd

Mettere il file di output in var - batch-file, cmd

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 № 1

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