Apakah mungkin untuk mengatur output pernyataan dari file batch ke variabel, misalnya:
findstr testing > %VARIABLE%
echo %VARIABLE%
Apakah mungkin untuk mengatur output pernyataan dari file batch ke variabel, misalnya:
findstr testing > %VARIABLE%
echo %VARIABLE%
Jawaban:
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Saya selalu menggunakan USEBACKQ sehingga jika Anda memiliki string untuk memasukkan atau nama file yang panjang, Anda dapat menggunakan tanda kutip ganda tanpa mengacaukan perintah.
Sekarang jika output Anda akan berisi banyak 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
ENABLEDELAYEDEXPANSION
|
dalam hal ini tidak berfungsi.
command
? Saya yakin itu mengembalikan kode non-nol tetapi %ERRORLEVEL%
selalu berisi 0, di mana pun saya mencoba menggunakannya (bahkan di dalam do
blok). Jadi saya kira beberapa bagian dari for
konstruksi itu menimpanya. BTW Tidak bisa dipercaya betapa gila kode dibutuhkan untuk sesuatu yang sangat mendasar.
Saya menemukan utas ini pada hal Interweb itu. 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 memasukkan konten file sementara itu ke dalam variabel Anda, seperti demikian juga. Ini tidak bekerja dengan input multiline.
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Kredit ke utas di Perangkat Keras Tom.
dalam satu baris:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
output perintah akan diatur dalam% g kemudian di VAR.
Informasi lebih lanjut: https://ss64.com/nt/for_cmd.html
Untuk membaca file ...
set /P Variable=<File.txt
Untuk Menulis file
@echo %DataToWrite%>File.txt
catatan; memiliki spasi sebelum karakter <> menyebabkan spasi ditambahkan di akhir variabel, juga
Untuk menambah file, seperti program logger, Pertama buat file dengan kunci enter tunggal di dalamnya yang disebut e.txt
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
log Anda akan terlihat seperti ini
Entry1
Entry2
dan seterusnya
Bagaimanapun beberapa hal berguna
Semua jawaban ini sangat dekat dengan jawaban yang saya butuhkan. Ini adalah upaya untuk mengembangkannya.
Jika Anda menjalankan dari dalam .bat
file dan Anda ingin satu baris yang memungkinkan Anda untuk mengekspor perintah yang rumit seperti jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
ke variabel bernama AWS_ACCESS_KEY
maka Anda ingin ini:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
Jika Anda pada C:\
prompt Anda ingin satu baris yang memungkinkan Anda untuk menjalankan perintah yang rumit seperti jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
untuk variabel bernama AWS_ACCESS_KEY
maka Anda menginginkan 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 dua jawaban di atas adalah bahwa pada baris perintah, Anda menggunakan% tunggal dalam variabel Anda. Dalam file batch, Anda harus menggandakan pada tanda-tanda persentase (%%).
Karena perintah menyertakan titik dua, tanda kutip, dan tanda kurung, Anda harus memasukkan USEBACKQ
baris dalam opsi sehingga Anda dapat menggunakan tanda kutip untuk menentukan perintah yang akan dijalankan dan kemudian semua jenis karakter lucu di dalamnya.
Jika Anda tidak ingin menampilkan ke file temp dan kemudian membaca ke dalam variabel, kode ini menyimpan hasil perintah langsung ke dalam variabel:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
Jika Anda ingin melampirkan string pencarian dalam tanda kutip ganda:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
Jika Anda ingin menyimpan kode ini dalam file batch, tambahkan simbol% ekstra:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
Contoh yang berguna untuk menghitung jumlah file dalam direktori & simpan dalam 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 aksen kubur` dalam tanda kurung perintah. Ini adalah alternatif yang lebih bersih untuk delims
, tokens
atau usebackq
dalam for
lingkaran.
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
appcmd
bukan program standar dan saya tidak bisa melihat di mana Anda menetapkan output program ke variabel. Akhirnya Anda perlu penjelasan lebih lanjut
Saya telah mengujinya seperti ini dan berhasil:
SET /P Var= | Cmd
Dengan memipakan perintah ke variabel, prompt akan memasukkan hasil dari perintah " Cmd
" ke dalam variabel " Var
".
Memperbarui:
Tidak berfungsi, salah saya, skrip yang saya lakukan adalah ini:
SET /P Var= | dir /b *.txt
echo %Var%
Itu sebenarnya menunjukkan katakanlah " test.txt
", tetapi sebenarnya menunjukkan hasil dari perintah " dir /b *.txt
", bukan echo %var%
. Saya bingung karena kedua outputnya sama.
pipe the command into a variable prompt
maka Anda harus menulisnya dir /b *.txt | SET /P Var=
untuk mendapatkan arah pipa yang benar. PS: Tidak juga begitu!
Semoga bantuan ini
set a=%username%
echo %a%
set a="hello"
echo %a%