Este posibil să se stabilească o declarație's de ieșire a unui fișier batch pentru o variabilă, de exemplu:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Eu folosesc întotdeauna USEBACKQ așa că, dacă aveți un șir de caractere pentru a introduce sau un nume lung de fișier, puteți utiliza ghilimele duble fără înșurubare comanda.
Acum, dacă dvs. de ieșire va conține mai multe linii, puteți face acest lucru
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var!count!=%%F
SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
Am găsit acest thread pe care nu o Pagină de lucru. Se reduce la:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
De asemenea, puteți redirecționa ieșire de comandă într-un fișier temporar, și apoi pune conținutul acelui fișier temporar în variabilă, likesuchashereby:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Credit pentru firul pe Tom's Hardware.
Pentru a citi un fișier...
set /P Variable=<File.txt
Pentru a Scrie un fișier
@echo %DataToWrite%>File.txt
notă; având spații înainte <> caractere determină un spațiu pentru a fi adăugat la sfârșitul variabilă, de asemenea,
Pentru a adăuga un fișier,cum ar fi un logger de program, În primul rând a face un fișier cu un singur tasta enter numit e.txt
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
jurnalul va arata astfel
Entry1
Entry2
și așa mai departe
Oricum câteva lucruri utile
Aceste răspunsuri au fost atât de aproape de răspunsul de care am nevoie. Aceasta este o încercare de a extinde pe ele.
Daca're de funcționare din cadrul unei .bat
fișier și doriți o singură linie, care vă permite să exportați un complicat comanda ca jq -r ".Acreditările.AccessKeyId" c:\temp\mfa-getCreds.json
pentru o variabilă numită AWS_ACCESS_KEY
apoi tu vrei asta:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
Daca're la C:\
prompt doriți o singură linie care vă permite să rulați un complicat comanda ca jq -r ".Acreditările.AccessKeyId" c:\temp\mfa-getCreds.json
pentru o variabilă numită AWS_ACCESS_KEY
apoi tu vrei asta:
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
Singura diferență între cele două răspunsuri de mai sus este că în linia de comandă, puteți folosi un singur % în variabilă. Într-un fișier batch, trebuie să se dubleze până la procentul semne (%%).
De comanda include două puncte, ghilimele și paranteze, aveți nevoie pentru a include USEBACKQ
linie în opțiuni, astfel încât să puteți utiliza backquotes pentru a specifica comanda pentru a rula și apoi tot felul de personaje amuzante în interiorul de ea.
Dacă tu nu't doriți să ieșire într-un fișier temporar și apoi citi într-o variabilă, acest cod magazine urmare a comanda direct într-o variabilă:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
Dacă doriți să includeți șir de căutare în două citate:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
Dacă doriți să stocați acest cod într-un fișier batch, adauga un plus de % simbol:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
Un exemplu util pentru a contoriza numărul de fișiere într-un director de & magazin într-o variabilă: (ilustrează conducte)
FOR /F %i IN ('dir /b /a-d "%cd%" ^| find /v /c "&"') DO set /a count=%i
Notă utilizarea de ghilimele simple în loc de ghilimele duble " sau accent grav ` în comanda paranteze. Aceasta este mai curat alternativă la delims
, jetoane " sau " usebackq
in pentru
bucla.
Testat pe Win 10 CMD.
cd %windir%\system32\inetsrv
@echo off
for /F "tokens=* USEBACKQ" %%x in (
`appcmd list apppool /text:name`
) do (
echo|set /p= "%%x - " /text:name & appcmd.exe list apppool "%%x" /text:processModel.identityType
)
echo %date% & echo %time%
pause
Am testat-o ca acest lucru și a lucrat:
SET /P Var= | Cmd
De conducte de comandă într-o variabilă, prompt va introduce rezultatul de comandă "Cmd
" în variabila " Var`".
Actualizare:
Nu't de lucru, greseala mea, script-ul am făcut-o a fost aceasta:
SET /P Var= | dir /b *.txt
echo %Var%
Acesta a fost, de fapt, arată las's spun "test.txt
", dar a fost, de fapt, arată rezultatul de la "dir /b *.txt
" comanda, nu echo %var%
. Am fost confuz, deoarece ambele ieșiri au fost aceleași.