Warum wird die for schleife nur einmal durchlaufen?
Hallo,
ich habe ein kleines Problem. Und zwar wird die for schleife nur einmal durchlaufen, obwohl in server.txt mehr als ein Server genannt wird.
Auf dem ersten Server funktioniert auch alles aber die anderen werden nicht angerührt.
Woran kann dies liegen? Kann ich dies anders lösen?
Für Antworten wäre ich sehr dankbar!
for /f %%o in (c:\server.txt) do (
set server=%%o
wmic /node: "%%o" PATH win32_operatingsystem GET caption /format:list > c:\Winversion.txt
find "Microsoft Windows Server 2008 R2" c:\Winversion.txt
if ERRORLEVEl 1 (GOTO W2K3) Else (GOTO W2K8)
:W2K3
mkdir \\%server%\c$\test\32
if exist "\\%server%\c$\test\32\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:W2K8
mkdir \\%server%\c$\test\64
if exist "\\%server%\c$\test\64\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:END
del c:\Winversion.txt
)
ich habe ein kleines Problem. Und zwar wird die for schleife nur einmal durchlaufen, obwohl in server.txt mehr als ein Server genannt wird.
Auf dem ersten Server funktioniert auch alles aber die anderen werden nicht angerührt.
Woran kann dies liegen? Kann ich dies anders lösen?
Für Antworten wäre ich sehr dankbar!
for /f %%o in (c:\server.txt) do (
set server=%%o
wmic /node: "%%o" PATH win32_operatingsystem GET caption /format:list > c:\Winversion.txt
find "Microsoft Windows Server 2008 R2" c:\Winversion.txt
if ERRORLEVEl 1 (GOTO W2K3) Else (GOTO W2K8)
:W2K3
mkdir \\%server%\c$\test\32
if exist "\\%server%\c$\test\32\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:W2K8
mkdir \\%server%\c$\test\64
if exist "\\%server%\c$\test\64\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:END
del c:\Winversion.txt
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159573
Url: https://administrator.de/forum/warum-wird-die-for-schleife-nur-einmal-durchlaufen-159573.html
Ausgedruckt am: 23.04.2025 um 13:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo bjoern.schrammen und willkommen im Forum!
Ich würde das (ungetestet) eher so anlegen:
Grüße
bastla
Ich würde das (ungetestet) eher so anlegen:
@echo off & setlocal
for /f %%o in (c:\server.txt) do (
wmic /node: "%%o" PATH win32_operatingsystem GET caption /format:list | find "Microsoft Windows Server 2008 R2">nul && call :MDir "%%o" 64 || call :MDir "%%o" 32
)
goto :eof
:MDir
md "\\%~1\c$\test\%2"
if exist "\\%~1\c$\test\%2\" (
echo %~1 Verzeichnis erstellt!
) else (
echo %~1 Error! Verzeichnis nicht erstellt!
)>>c:\Windows\Temp\opc_inst.log
goto :eof
bastla
Hallo Björn,
versuche es mal so. Ich kann's nicht testen.
Meine Vermutung: Das Setzen von Umgebungsvariablen in For-Schleifen ist (für mich) eine Welt für sich. Hilfe findest Du sicherlich Tutorial zur FOR-Schleife, aber auch in den anderen Tutorials.
Markus
Edit: wieder mal so langsam und ideelos ...
versuche es mal so. Ich kann's nicht testen.
Meine Vermutung: Das Setzen von Umgebungsvariablen in For-Schleifen ist (für mich) eine Welt für sich. Hilfe findest Du sicherlich Tutorial zur FOR-Schleife, aber auch in den anderen Tutorials.
Markus
Edit: wieder mal so langsam und ideelos ...
for /f %%o in (c:\server.txt) do call :MachWat %%o
goto :eof
:MachWat
REM set server=%%o so wird das natürlich nix. Dank an Bastla
set server=%1
wmic /node: "%Server%" PATH win32_operatingsystem GET caption /format:list > c:\Winversion.txt
find "Microsoft Windows Server 2008 R2" c:\Winversion.txt
if ERRORLEVEl 1 (GOTO W2K3) Else (GOTO W2K8)
:W2K3
mkdir \\%server%\c$\test\32
if exist "\\%server%\c$\test\32\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:W2K8
mkdir \\%server%\c$\test\64
if exist "\\%server%\c$\test\64\." (
echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log
) ELSE (
echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log
)
GOTO END
:END
del c:\Winversion.txt
@BigWim
Im Unterprogramm ist die Schleifenvariable %%o nicht verfügbar - Du kannst sie nur entweder als Parameter übergeben (siehe meinen Ansatz oben) oder bereits vorweg der Variablen %server% zuweisen, also etwa:
<code type"=plain">for /f %%o in (c:\server.txt) do set "server=%%o" & call :MachWat
Auf jeden Fall musst Du dann natürlich auch in der "
Grüße
bastla
Im Unterprogramm ist die Schleifenvariable %%o nicht verfügbar - Du kannst sie nur entweder als Parameter übergeben (siehe meinen Ansatz oben) oder bereits vorweg der Variablen %server% zuweisen, also etwa:
<code type"=plain">for /f %%o in (c:\server.txt) do set "server=%%o" & call :MachWat
Auf jeden Fall musst Du dann natürlich auch in der "
wmic
"-Zeile anstelle von %%o eine der beiden anderen Variablen (%1 oder %server%) verwenden ...Grüße
bastla
@bastla
Ach Mist. Das habe ich natürlich übersehen.
Richtig, es muß heißen
Das habe ich mir so angewöhnt, weil ich das mit der richtigen Schreibweise (!Server!) in FOR-Schleifen zu oft falsch mache.
Ich werde das im Posting sofort richtig stellen.
Danke, dass Du immer auf mich aufpaßt
Markus
Ach Mist. Das habe ich natürlich übersehen.
Richtig, es muß heißen
for /f %%o in (c:\server.txt) do call :MachWat %%o
goto :eof
:MachWat
set server=%1
Das habe ich mir so angewöhnt, weil ich das mit der richtigen Schreibweise (!Server!) in FOR-Schleifen zu oft falsch mache.
Ich werde das im Posting sofort richtig stellen.
Danke, dass Du immer auf mich aufpaßt
Markus
@BigWim
(und denk auch noch an die Zeile 7) ...
Grüße
bastla
Danke, dass Du immer auf mich aufpaßt 
Aber gerne Grüße
bastla