bjoern.schrammen
Goto Top

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
)

Content-Key: 159573

Url: https://administrator.de/contentid/159573

Printed on: April 24, 2024 at 04:04 o'clock

Member: bastla
bastla Jan 27, 2011 at 12:35:30 (UTC)
Goto Top
Hallo bjoern.schrammen und willkommen im Forum!

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
Grüße
bastla
Member: BigWim
BigWim Jan 27, 2011 at 12:36:52 (UTC)
Goto Top
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 ...


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
Member: bastla
bastla Jan 27, 2011 at 12:39:03 (UTC)
Goto Top
@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 "wmic"-Zeile anstelle von %%o eine der beiden anderen Variablen (%1 oder %server%) verwenden ...

Grüße
bastla
Member: BigWim
BigWim Jan 27, 2011 at 12:43:55 (UTC)
Goto Top
@bastla

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 face-wink

Markus
Member: bastla
bastla Jan 27, 2011 at 12:44:55 (UTC)
Goto Top
@BigWim
Danke, dass Du immer auf mich aufpaßt face-wink
Aber gerne face-smile (und denk auch noch an die Zeile 7) ...

Grüße
bastla
Member: BigWim
BigWim Jan 27, 2011 at 12:46:33 (UTC)
Goto Top
@bastla

Gerade bemerkt und doch zu spät. Schon korrigiert.

Markus

Edit: ohne Worte, außer 1000 Dank!
Member: bjoern.schrammen
bjoern.schrammen Jan 27, 2011 at 13:04:00 (UTC)
Goto Top
Hallo,

vielen dank!!!

Das Script von BigWim funktioniert einwandfrei.

Ich danke vielmals!

MFG
Member: BigWim
BigWim Jan 27, 2011 at 13:08:35 (UTC)
Goto Top
Das Script von BigWim
Naja. Sagen wir 50:50

Viel Erfolg
Markus
Member: bjoern.schrammen
bjoern.schrammen Jan 27, 2011 at 13:10:52 (UTC)
Goto Top
Oh na klar ich wollte bastia nicht im Schatten stehen lassen.
Natürlich auch ihm vielen dank für seine Hilfe!