Adalah mungkin untuk mengatur sebuah pernyataan's output dari sebuah batch file untuk sebuah variabel, misalnya:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Saya selalu menggunakan USEBACKQ sehingga jika anda memiliki tali untuk menyisipkan atau nama file yang panjang, anda dapat menggunakan tanda kutip ganda tanpa mengacaukan perintah.
Sekarang jika anda output akan berisi beberapa baris, anda dapat melakukan ini
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
Saya menemukan thread ini pada yang ada Interweb hal. Bermuara ke:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Anda juga dapat mengarahkan output dari perintah ke file sementara, dan kemudian menempatkan isi dari file sementara ke variabel, likesuchashereby:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Kredit untuk benang pada Tom's perangkat Keras.
Untuk membaca file...
set /P Variable=<File.txt
Untuk Menulis file
@echo %DataToWrite%>File.txt
catatan; memiliki ruang sebelum <> karakter menyebabkan ruang akan ditambahkan pada akhir dari variabel, juga
Untuk menambahkan ke file,seperti program logger, Pertama buatlah file dengan satu tombol enter di dalamnya disebut e.txt
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
anda login akan terlihat seperti ini
Entry1
Entry2
dan sebagainya
Lagian beberapa hal-hal yang berguna
Jawaban-jawaban mereka semua begitu dekat dengan jawaban yang saya butuhkan. Ini merupakan upaya untuk memperluas pada mereka.
Jika anda're berjalan dari dalam .bat
file dan anda ingin garis tunggal yang memungkinkan anda untuk mengekspor rumit perintah seperti jq -r ".Kredensial.AccessKeyId" c:\temp\mfa-getCreds.json
untuk sebuah variabel bernama AWS_ACCESS_KEY
maka anda inginkan ini:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
Jika anda'kembali di C:\
prompt anda ingin garis tunggal yang memungkinkan anda untuk menjalankan rumit perintah seperti jq -r ".Kredensial.AccessKeyId" c:\temp\mfa-getCreds.json
untuk sebuah variabel bernama AWS_ACCESS_KEY
maka anda inginkan ini:
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
Satu-satunya perbedaan antara kedua jawaban di atas adalah bahwa pada baris perintah, anda menggunakan satu % pada variabel anda. Dalam sebuah batch file, anda harus dua kali lipat pada persentase tanda-tanda (%%).
Sejak perintah termasuk titik dua, tanda kutip, dan tanda kurung, anda perlu menyertakan USEBACKQ
line dalam pilihan sehingga anda dapat menggunakan backquotes untuk menentukan perintah yang akan dijalankan dan kemudian semua jenis karakter lucu di dalamnya.
Jika anda don't ingin output ke file temp dan kemudian membaca ke dalam suatu variabel, kode ini menyimpan hasil perintah langsung ke dalam sebuah variabel:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
Jika anda ingin menyertakan pencarian string dalam tanda kutip ganda:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
Jika anda ingin menyimpan kode ini di file batch, tambahkan ekstra % simbol:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
Contoh yang berguna untuk menghitung jumlah file dalam direktori & toko dalam sebuah variabel: (menggambarkan perpipaan)
FOR /F %i IN ('dir /b /a-d "%cd%" ^| find /v /c "&"') DO set /a count=%i
Perhatikan penggunaan tanda kutip tunggal bukan tanda kutip ganda " atau kuburan aksen ` dalam perintah kurung. Ini adalah pembersih alternatif untuk delims
, token
atau usebackq
di untuk
loop.
Diuji pada 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
Saya telah diuji seperti ini dan itu bekerja:
SET /P Var= | Cmd
Oleh pipa perintah ke dalam sebuah variabel, prompt akan memasukkan hasil dari perintah "Cmd
" ke dalam variabel "Var
".
Update:
Itu doesn't bekerja, saya buruk, script yang saya lakukan adalah ini:
SET /P Var= | dir /b *.txt
echo %Var%
Itu benar-benar menunjukkan let's mengatakan "test.txt
", tapi itu sebenarnya menunjukkan hasil dari "dir /b *.txt
" perintah, bukan echo %var%
. Saya bingung, karena kedua output yang sama.