Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Warum wird die for schleife nur einmal durchlaufen?

Frage Entwicklung Batch & Shell

Mitglied: bjoern.schrammen

bjoern.schrammen (Level 1) - Jetzt verbinden

27.01.2011 um 13:05 Uhr, 4304 Aufrufe, 9 Kommentare

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
)
Mitglied: bastla
27.01.2011 um 13:35 Uhr
Hallo bjoern.schrammen und willkommen im Forum!

Ich würde das (ungetestet) eher so anlegen:
01.
@echo off & setlocal 
02.
for /f %%o in (c:\server.txt) do ( 
03.
    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 
04.
05.
goto :eof 
06.
	 
07.
:MDir 
08.
md "\\%~1\c$\test\%2" 
09.
if exist "\\%~1\c$\test\%2\" ( 
10.
    echo %~1 Verzeichnis erstellt! 
11.
) else ( 
12.
    echo %~1 Error! Verzeichnis nicht erstellt! 
13.
)>>c:\Windows\Temp\opc_inst.log 
14.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: BigWim
27.01.2011 um 13:36 Uhr
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 hier, aber auch in den anderen Tutorials.

Markus

Edit: wieder mal so langsam und ideelos ...


01.
for /f %%o in (c:\server.txt) do call :MachWat %%o 
02.
goto :eof 
03.
 
04.
:MachWat 
05.
REM set server=%%o  so wird das natürlich nix. Dank an Bastla 
06.
set server=%1 
07.
wmic /node: "%Server%" PATH win32_operatingsystem GET caption /format:list > c:\Winversion.txt 
08.
find "Microsoft Windows Server 2008 R2" c:\Winversion.txt 
09.
if ERRORLEVEl 1 (GOTO W2K3) Else (GOTO W2K8) 
10.
 
11.
:W2K3 
12.
mkdir \\%server%\c$\test\32 
13.
if exist "\\%server%\c$\test\32\." ( 
14.
  echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log  
15.
) ELSE ( 
16.
  echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log 
17.
)  
18.
GOTO END 
19.
 
20.
:W2K8 
21.
mkdir \\%server%\c$\test\64 
22.
if exist "\\%server%\c$\test\64\." ( 
23.
  echo %server% Verzeichniss erstellt! >> c:\Windows\Temp\opc_inst.log  
24.
) ELSE ( 
25.
  echo %server% Error! Verzeichniss nicht erstellt! >> C:\Windows\Temp\opc_inst.log 
26.
)  
27.
GOTO END 
28.
 
29.
:END 
30.
del c:\Winversion.txt
Bitte warten ..
Mitglied: bastla
27.01.2011 um 13:39 Uhr
@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:
01.
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
Bitte warten ..
Mitglied: BigWim
27.01.2011 um 13:43 Uhr
@bastla

Ach Mist. Das habe ich natürlich übersehen.

Richtig, es muß heißen

01.
for /f %%o in (c:\server.txt) do call :MachWat %%o 
02.
goto :eof 
03.
 
04.
:MachWat 
05.
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
Bitte warten ..
Mitglied: bastla
27.01.2011 um 13:44 Uhr
@BigWim
Danke, dass Du immer auf mich aufpaßt
Aber gerne (und denk auch noch an die Zeile 7) ...

Grüße
bastla
Bitte warten ..
Mitglied: BigWim
27.01.2011 um 13:46 Uhr
@bastla

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

Markus

Edit: ohne Worte, außer 1000 Dank!
Bitte warten ..
Mitglied: bjoern.schrammen
27.01.2011 um 14:04 Uhr
Hallo,

vielen dank!!!

Das Script von BigWim funktioniert einwandfrei.

Ich danke vielmals!

MFG
Bitte warten ..
Mitglied: BigWim
27.01.2011 um 14:08 Uhr
Das Script von BigWim
Naja. Sagen wir 50:50

Viel Erfolg
Markus
Bitte warten ..
Mitglied: bjoern.schrammen
27.01.2011 um 14:10 Uhr
Oh na klar ich wollte bastia nicht im Schatten stehen lassen.
Natürlich auch ihm vielen dank für seine Hilfe!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Sicherheit
Was ist auf einmal passiert? (11)

Frage von DavidA zum Thema Sicherheit ...

Windows Server
gelöst Einzelne Dateien auf einem Server haben auf einmal keine Berechtigungen mehr (7)

Frage von StefanKittel zum Thema Windows Server ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...