Cara mengatur perintah output sebagai variabel dalam sebuah batch file

Adalah mungkin untuk mengatur sebuah pernyataan's output dari sebuah batch file untuk sebuah variabel, misalnya:

findstr testing > %VARIABLE%

echo %VARIABLE%
Mengomentari pertanyaan (6)
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
Komentar (7)

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.

Komentar (5)

dalam satu baris:

FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)

perintah output yang akan ditetapkan dalam %g kemudian di VAR.

Informasi lebih lanjut: https://ss64.com/nt/for_cmd.html

Komentar (2)

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=
Komentar (0)

Jawaban-jawaban mereka semua begitu dekat dengan jawaban yang saya butuhkan. Ini merupakan upaya untuk memperluas pada mereka.

Dalam sebuah Batch file

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")

Pada Baris Perintah

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")

Penjelasan

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.

Komentar (0)

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.

Komentar (0)
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
Komentar (1)

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.

Komentar (4)

Semoga bantuan ini

set a=%username%
echo %a%    
set a="hello"
echo %a%
Komentar (3)