IF bei Batch
Hallo allerseits!
Ich bin gerade dabei, einen kleinen Batch Script zu schreiben, der NT User zu vollen Namen auflöst:
ECHO Suche: %1 ... >>C:\Temp\Userfullist.txt
FOR /F "tokens=2 delims==" %%i IN ('GetFullName.exe %1 %XDOMAIN%') DO CALL :AUSGABE %1 "%%i"
GOTO :EOF
:AUSGABE
ECHO %~1 %~2 >>C:\Temp\Userfullist.txt
Das klappt auch schon soweit. Der erstellt mir meine Userfullist und ferdisch.
Nun will ich aber, dass wenn die Ausgabe davon = "" ist (also nt user nicht vorhanden), der username in eine extra Datei geschrieben wird. Wenn der Name nicht aufgelöst wird, wie man oben im Script sieht, %1 ... gespeichert.
Da ich ich mir ich mach mal folghendes:
IF "%~1" == "" ECHO %1 >>C:\Temp\test.txt
Klappt nur leider nicht
Ich hab keine Ahnung warum! Kann mir jmd helfen?
Ich bin gerade dabei, einen kleinen Batch Script zu schreiben, der NT User zu vollen Namen auflöst:
ECHO Suche: %1 ... >>C:\Temp\Userfullist.txt
FOR /F "tokens=2 delims==" %%i IN ('GetFullName.exe %1 %XDOMAIN%') DO CALL :AUSGABE %1 "%%i"
GOTO :EOF
:AUSGABE
ECHO %~1 %~2 >>C:\Temp\Userfullist.txt
Das klappt auch schon soweit. Der erstellt mir meine Userfullist und ferdisch.
Nun will ich aber, dass wenn die Ausgabe davon = "" ist (also nt user nicht vorhanden), der username in eine extra Datei geschrieben wird. Wenn der Name nicht aufgelöst wird, wie man oben im Script sieht, %1 ... gespeichert.
Da ich ich mir ich mach mal folghendes:
IF "%~1" == "" ECHO %1 >>C:\Temp\test.txt
Klappt nur leider nicht
Ich hab keine Ahnung warum! Kann mir jmd helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 32588
Url: https://administrator.de/contentid/32588
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
Moin schulle2,
liegt daran, dass Du in der Liste der beiden Parameter, die an die "Routine" Ausgabe übergibt, nie den ersten Parameter leer haben kannst.
Der CMD-Interpreter fängt ja mit dem ersten gefundenen Parameter an - dieser wird dan der Parameter 1.
Dreh die beiden Parameter um, dann geht das:
Hope That Helps
Biber
liegt daran, dass Du in der Liste der beiden Parameter, die an die "Routine" Ausgabe übergibt, nie den ersten Parameter leer haben kannst.
Der CMD-Interpreter fängt ja mit dem ersten gefundenen Parameter an - dieser wird dan der Parameter 1.
Dreh die beiden Parameter um, dann geht das:
ECHO Suche: %1 ... >>C:\Temp\Userfullist.txt
FOR /F "tokens=2 delims==" %%i IN ('GetFullName.exe %1 %XDOMAIN%') DO CALL :AUSGABE "%%i" %1
GOTO :EOF
:AUSGABE Para 2: ist jetzt der Suchname; Para 1 der aufgelöste Name
IF "%~2" == "" (
ECHO %2 konnte nicht aufgelöst werden! >>C:\Temp\test.txt
) ELSE (
ECHO %~2 %~1 >>C:\Temp\Userfullist.txt
)
GOTo :eof
Hope That Helps
Biber
Na ja,
wenn die Rückgabe von GetFullUser.exe im "Fehlerfall", also wenn der Name nicht aufgelöst werden kann, gar kein zweites Token/gar keinen Wert rechts vom Gleichheitszeichen zurückgibt, dann wird auch der ganze Block "call :Ausgabe" gat nicht gerufen.
Dann musst Du es so abfangen:
wenn die Rückgabe von GetFullUser.exe im "Fehlerfall", also wenn der Name nicht aufgelöst werden kann, gar kein zweites Token/gar keinen Wert rechts vom Gleichheitszeichen zurückgibt, dann wird auch der ganze Block "call :Ausgabe" gat nicht gerufen.
Dann musst Du es so abfangen:
ECHO Suche: %1 ... >>C:\Temp\Userfullist.txt
FOR /F "tokens=1,2 delims==" %%i IN ('GetFullName.exe %1 %XDOMAIN%') DO CALL :AUSGABE "%%i" "%%j" %1
GOTO :EOF
:AUSGABE Para 3: ist jetzt der Suchname; Para 2 der aufgelöste Name, para 1 egal
IF "%~3" == "" (
ECHO %2 konnte nicht aufgelöst werden! >>C:\Temp\test.txt
) ELSE (
ECHO %~3 %~2 >>C:\Temp\Userfullist.txt
)
GOTo :eof