Ist es möglich, die Ausgabe einer Stapelverarbeitungsdatei einer Anweisung auf eine Variable zu setzen, zum Beispiel:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Ich benutze immer USEBACKQ, damit Sie, wenn Sie eine Zeichenfolge zum Einfügen oder einen langen Dateinamen haben, Ihre doppelten Anführungszeichen verwenden können, ohne den Befehl zu vermasseln.
Wenn Ihre Ausgabe nun mehrere Zeilen enthält, können Sie dies tun
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
Ich habe diesen Thread auf der dortigen Interweb-Sache gefunden. Läuft darauf hinaus:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Sie können die Ausgabe eines Befehls auch in eine temporäre Datei umleiten und dann den Inhalt dieser temporären Datei in Ihre Variable einfügen.
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Gutschrift für den Thread auf Toms Hardware.
in einer einzigen Zeile:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
die Befehlsausgabe wird in% g und dann in VAR gesetzt.
Weitere Informationen: https://ss64.com/nt/for_cmd.html
So lesen Sie eine Datei ...
set /P Variable=<File.txt
Eine Datei schreiben
@echo %DataToWrite%>File.txt
hinweis; Wenn vor dem Zeichen <> Leerzeichen stehen, wird auch am Ende der Variablen ein Leerzeichen eingefügt
Um eine Datei wie ein Logger-Programm hinzuzufügen, erstellen Sie zunächst eine Datei mit einer einzigen Eingabetaste namens e.txt
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
ihr Protokoll wird so aussehen
Entry1
Entry2
und so weiter
Trotzdem ein paar nützliche Dinge
Diese Antworten waren alle so nah an der Antwort, die ich brauchte. Dies ist ein Versuch, sie zu erweitern.
Wenn Sie in einer .bat
- Datei ausgeführt werden und eine einzelne Zeile möchten, mit der Sie einen komplizierten Befehl wie jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
In eine Variable mit dem Namen AWS_ACCESS_KEY
Exportieren können, möchten Sie dies :
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
Wenn Sie sich an der Eingabeaufforderung C:\
Befinden, möchten Sie eine einzelne Zeile, mit der Sie einen komplizierten Befehl wie jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
Für eine Variable mit dem Namen AWS_ACCESS_KEY
Ausführen können, dann möchten Sie Folgendes:
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
Der einzige Unterschied zwischen den beiden obigen Antworten besteht darin, dass Sie in der Befehlszeile ein einzelnes% in Ihrer Variablen verwenden. In einer Batch-Datei müssen Sie die Prozentzeichen (%%) verdoppeln.
Da der Befehl Doppelpunkte, Anführungszeichen und Klammern enthält, müssen Sie die USEBACKQ
-Zeile in die Optionen einfügen, damit Sie den auszuführenden Befehl in Anführungszeichen und alle Arten von lustigen Zeichen eingeben können.
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