Ist es möglich, die Ausgabe einer Anweisung in einer Batch-Datei 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 verwende immer das USEBACKQ, damit Sie bei einer einzufügenden Zeichenkette oder einem langen Dateinamen Ihre doppelten Anführungszeichen verwenden können, ohne den Befehl zu vermasseln.
Wenn Ihre Ausgabe mehrere Zeilen umfasst, können Sie Folgendes 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] (http://www.tomshardware.com/forum/230090-45-windows-batch-file-output-program-variable) in diesem Interweb-Ding gefunden. Läuft auf folgendes hinaus:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Man kann auch die Ausgabe eines Befehls in eine temporäre Datei umleiten und dann den Inhalt dieser temporären Datei in die Variable einfügen, z.B. so:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Hinweis auf den Thread auf Tom's Hardware.
Ich habe es so getestet und es hat funktioniert:
SET /P Var= | Cmd
Indem der Befehl in eine Variable geleitet wird, fügt prompt das Ergebnis des Befehls "Cmd
" in die Variable "Var
" ein.
Aktualisierung:
Es funktioniert nicht, mein Fehler, das Skript, das ich gemacht habe, war dieses:
SET /P Var= | dir /b *.txt
echo %Var%
Es zeigte eigentlich, sagen wir mal "test.txt
", aber es zeigte tatsächlich das Ergebnis des "dir /b *.txt
" Befehls, nicht des echo %var%
. Ich war verwirrt, da beide Ausgaben die gleichen waren.