
14634
07.10.2010, aktualisiert um 15:27:33 Uhr
For schleife mit 2 befehlen ausführen?
HAllo, ich habe folgenden quellcode schnipsel den ich in eine for schleife integrieren will:
for /F %%a IN (XXX.txt) do call psexec.exe \\%%a -c deltemp.bat
set S={ERR} DELETE TEMP %%a ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
hier wird eine XXX.txt genommen die PC namen beinhaltet und mit deltemp.bat bearbeitet.
Dies funzt auch soweit sehr gut.
Da es sein kann das einige Rechner aus sind bzw nicht am Netz hängen, habe ich eine Errorlevel ausgabe hinzugefügt.
Problem bei dieser konstalation ist das die erste zeile einmal beim start ausgeführt wird und eben die XXX.txt abarbeitet, die Errorlevel zeile zeigt mir deswegen nur einen PC im Log an da diese auch nur einmal ausgeführt wird aber eben dann nicht weiß das die erste zeile weiter mit XXX.txt arbeitet!
Ich habe gedacht das man hier eine FOR bzw IF schleife einbauen kann, wo beim durchgang der beiden zeilen genau 1 PC mit der deltemp bearbeitet wird und ich deswegen einen sauberen Log bekomme, oder??
kann hier jemand evt helfen eine gescheide IF bzw FOR schleife zu generieren??
die if bzw for formel muss auch quasi wissen, wie viel pc noch in der liste nicht abarbeitet sind...
Vielen Dank
for /F %%a IN (XXX.txt) do call psexec.exe \\%%a -c deltemp.bat
set S={ERR} DELETE TEMP %%a ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
hier wird eine XXX.txt genommen die PC namen beinhaltet und mit deltemp.bat bearbeitet.
Dies funzt auch soweit sehr gut.
Da es sein kann das einige Rechner aus sind bzw nicht am Netz hängen, habe ich eine Errorlevel ausgabe hinzugefügt.
Problem bei dieser konstalation ist das die erste zeile einmal beim start ausgeführt wird und eben die XXX.txt abarbeitet, die Errorlevel zeile zeigt mir deswegen nur einen PC im Log an da diese auch nur einmal ausgeführt wird aber eben dann nicht weiß das die erste zeile weiter mit XXX.txt arbeitet!
Ich habe gedacht das man hier eine FOR bzw IF schleife einbauen kann, wo beim durchgang der beiden zeilen genau 1 PC mit der deltemp bearbeitet wird und ich deswegen einen sauberen Log bekomme, oder??
kann hier jemand evt helfen eine gescheide IF bzw FOR schleife zu generieren??
die if bzw for formel muss auch quasi wissen, wie viel pc noch in der liste nicht abarbeitet sind...
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 152575
Url: https://administrator.de/forum/for-schleife-mit-2-befehlen-ausfuehren-152575.html
Ausgedruckt am: 16.05.2025 um 18:05 Uhr
3 Kommentare
Neuester Kommentar
ungetestet würde ich so probieren:
Nicht alles als Einzeiler zu machen ist sicherlich eine Geschmacksfrage ...
Markus
for /F %%a IN (XXX.txt) do call :Machwas %%a
goto :eof
:Machwas
REM %%a wird zu %1
ping -n 1 %1 >NUL:
if %errorlevel% neq 0 (
echo %1 ist aus
) else (
call psexec.exe \\%%a -c deltemp.bat
set S={ERR} DELETE TEMP %%a ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
)
goto :eof
Nicht alles als Einzeiler zu machen ist sicherlich eine Geschmacksfrage ...
Markus
Zitat von @14634:
kann es sein das im Code was nicht stimmt, ich bekomme folgende rückmeldung im DOS fenster:
Ja, sorry. Mal eben ist nie gut in unserem Bereichkann es sein das im Code was nicht stimmt, ich bekomme folgende rückmeldung im DOS fenster:
ich habe Deine Zeile natürlich nicht bis zum Ende bearbeitet. Aus %%a wird %1. Der Call-Befehl wirkt wie ein Batch-Aufruf nur mit dem Unterschied, dass keine andere *.cmd aufgerufen wird, sondern eine Subroutine innerhalb der *.cmd. Das Goto :eof bewirkt dann, dass an der aufrufenden Stelle "weiter gemacht" wird.
Also, aus
call psexec.exe \\%%a -c deltemp.bat
set S={ERR} DELETE TEMP %%a ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
wird
call psexec.exe \\%1 -c deltemp.bat
set S={ERR} DELETE TEMP %1 ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
ich will eben auch das er mit die PC mit errorlevel 0 in den log reinschreibt
Ja, das Muster habe ich aus meiner CMD kopiert. Wenn in jedem Fall protokolliert wird, lass das IF ELSE weg, also so:for /F %%a IN (XXX.txt) do call :Machwas %%a
goto :eof
:Machwas
REM %%a wird zu %1
call psexec.exe \\%1 -c deltemp.bat
set S={ERR} DELETE TEMP %1 ERRORLEVEL is %ERRORLEVEL% &CALL :LOG
goto :eof
Markus