webentwicklung-frage-antwort-db.com.de

Festlegen der Befehlsausgabe als Variable in einer Batchdatei

Ist es möglich, die Ausgabe einer Stapelverarbeitungsdatei einer Anweisung auf eine Variable zu setzen, zum Beispiel:

findstr testing > %VARIABLE%

echo %VARIABLE%
182
Dennis
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
228
Mechaflash

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.

57
dolphy

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

30
Yuri

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

18

Diese Antworten waren alle so nah an der Antwort, die ich brauchte. Dies ist ein Versuch, sie zu erweitern.

In einer Batch-Datei

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

In der Befehlszeile

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

Erläuterung

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.

5
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
2
Dado