Top-Themen

Aktuelle Themen (A bis Z)

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 Variable innerhalb einer forschleife setzen nicht möglich ?

Mitglied: lobiwan

lobiwan (Level 1) - Jetzt verbinden

31.03.2009, aktualisiert 17:49 Uhr, 3719 Aufrufe, 6 Kommentare

Ich weiss ja nicht wie blöd ich bin, aber ich verzweifle mittlerweile.
Ich habe hier soviel beispiele gefunden und alle mindestens 2x durchprobiert, nur funktionieren die hier nicht.
Zuletzt habe ich diesen Tipp probiert : Set-Befehl innerhalb einer Schleife funktioniert nicht wie erwartet
Ich brauche das um später mit PSINFO nach einer Software zu scannen ... oder ich darf rennen rennen rennen rennen ....

Folgendes Script will nicht so wie es es möchte :
In der Datei rechner.txt ist pro zeile ein Hostname
Ich brauche die neuen Dateien um sicherzustellen alle mal erfasst zu haben, die die gerade offline sind dann eben beim nächsten mal ...
01.
@ECHO ON 
02.
setlocal disabledelayedexpansion  
03.
:: setlocal ensabledelayedexpansion  
04.
For /F "tokens=1" %%i in (rechner.txt) do ( 
05.
	SET "PCONLINE=0" 
06.
	ping -n 1 %%i | find "TTL=" && SET "PCONLINE=1" 
07.
	IF "%PCONLINE%"=="1" (  
08.
		ECHO %%i>>online.txt 
09.
	) ELSE ( 
10.
		ECHO %%i>>offline.txt 
11.
12.
13.
 
Lobiwan
Mitglied: miniversum
31.03.2009 um 17:55 Uhr
Die einfachste Möglichkeit wäre so:
01.
@ECHO ON 
02.
For /F "tokens=1" %%i in (rechner.txt) do call:teste 
03.
goto:eof 
04.
 
05.
:teste 
06.
SET "PCONLINE=0" 
07.
ping -n 1 %1 | find "TTL=" && SET "PCONLINE=1" 
08.
IF "%PCONLINE%"=="1" (  
09.
	ECHO %1>>online.txt 
10.
) ELSE ( 
11.
	ECHO %1>>offline.txt 
12.
)
Bitte warten ..
Mitglied: bastla
31.03.2009 um 17:59 Uhr
... oder vielleicht doch nur
for /f "delims=" %i in (rechner.txt) do @ping -n 1 %i|find "TTL=">nul && (echo %i>>online.txt) || (echo %i>>offline.txt)
direkt von der Kommandozeile (bzw eben mit jeweils %%i als Batch) ...

Grüße
bastla
Bitte warten ..
Mitglied: lobiwan
01.04.2009 um 09:21 Uhr
miniversum:
So ähnlich hatte ich es auch schon mal, leider wird bei dieser Variante dem Ping kein Rechnernamen übergeben ...
Hier dieAusgabe bei 4 Rechnern in der rechner.txt:
-----schnipp----
c:\test\>test4.cmd
c:\test\>For /F "tokens=1" %i in (rechner.txt) do call:teste
c:\test\>call:teste
c:\test\>SET "PCONLINE=0"
c:\test\>ping -n 1 | find "TTL=" && SET "PCONLINE=1"
c:\test\>IF "0" == "1" (ECHO 1>>online.txt ) ELSE (ECHO 1>>offline.txt )
c:\test\>call:teste
c:\test\>SET "PCONLINE=0"
c:\test\>ping -n 1 | find "TTL=" && SET "PCONLINE=1"
c:\test\>IF "0" == "1" (ECHO 1>>online.txt ) ELSE (ECHO 1>>offline.txt )
c:\test\>call:teste
c:\test\>SET "PCONLINE=0"
c:\test\>ping -n 1 | find "TTL=" && SET "PCONLINE=1"
c:\test\>IF "0" == "1" (ECHO 1>>online.txt ) ELSE (ECHO 1>>offline.txt )
c:\test\>call:teste
c:\test\>SET "PCONLINE=0"
c:\test\>ping -n 1 | find "TTL=" && SET "PCONLINE=1"
c:\test\>IF "0" == "1" (ECHO 1>>online.txt ) ELSE (ECHO 1>>offline.txt )
c:\test\>
-----schnipp----

Bastla:
Deine Variante funktioniert gut, nur war dies ja nur ein auszug aus dem ganzen script und ich
wollte später in der schleife noch via PSEXEC nen paar reg-einträge auf die jeweiligen PC's schieben.
Deswegen hatte ich versucht die Variable zu setzen.
Ich "scanne" damit später ca 700 Rechner, bis der damit durch ist könnte der erste schon wieder offline sein.
Für die spätere Verwendung ist die offline.txt am Interessantesten, da ich nach einem durchlauf die
offline.txt in rechner.txt umbennen wollte um wieder von neuem zu beginnen bis eben alle mal gepatched wurden.
Bitte warten ..
Mitglied: lobiwan
01.04.2009 um 11:24 Uhr
Ich habe keine Ahnung warum es die ganze Zeit nicht ging, aber warum drüber nachdenken, jetzt geht es und ich werde es mir als Beispiel ablegen.
Falls jemand das gleiche Problem hat, anbei mein Skelett ...
01.
@ECHO OFF 
02.
:ANFANG 
03.
SET NEUERUNDE=0 
04.
IF EXIST offline.txt del offline.txt 
05.
IF EXIST online.txt del online.txt 
06.
IF NOT EXIST rechner.txt ECHO Fehler ! rechner.txt nicht gefunden ! && Pause && EXIT 
07.
FOR /F "tokens=1" %%i IN (rechner.txt) DO CALL:checkPC %%i 
08.
GOTO:NEXTROUND  
09.
 
10.
:checkPC  
11.
SET "PCONLINE=0"  
12.
ECHO Check PC : %1 
13.
ping -n 1 %1 | find "TTL=" >NUL && SET "PCONLINE=1"  
14.
IF "%PCONLINE%"=="1" (   
15.
	ECHO %1>>online.txt  
16.
	ECHO PC %1 ist ON 
17.
	CALL:DO_IT %1 
18.
) ELSE (  
19.
	ECHO %1>>offline.txt 
20.
	ECHO PC %1 ist OFF 
21.
22.
GOTO:eof 
23.
 
24.
:DO_IT 
25.
ECHO PC %1 wird bearbeitet ... 
26.
REM DO Irgendwas ;-) 
27.
REM Und noch viel mehr ... 
28.
GOTO:eof 
29.
 
30.
:NEXTROUND 
31.
IF EXIST offline.txt ( 
32.
	IF EXIST rechner.txt DEL rechner.txt 
33.
	Rename offline.txt rechner.txt 
34.
	SET NEUERUNDE=1 
35.
36.
IF "%NEUERUNDE%"=="1" GOTO ANFANG 
37.
EXIT 
38.
 
In der rechner.txt ist jeweils ein Hostname pro Zeile.

Vielen Dank für die mal wieder super schnelle und kompetente Beantwortung !!!

Lobiwan
Bitte warten ..
Mitglied: miniversum
01.04.2009 um 13:09 Uhr
Oh da ist ein Fehler in meinem skript.
Änderst du meine Zeile 2 in diese sollte es gehen:
For /F "tokens=1" %%i in (rechner.txt) do call:teste %%i
Bitte warten ..
Mitglied: bastla
01.04.2009 um 14:56 Uhr
Hallo lobiwan!

Nur der Vollständigkeit halber: Wenn Du nur einen Schalter setzen willst, um den Online-Status anzuzeigen, lässt sich das sehr einfach auch innerhalb einer "for"-Schleife realisieren, indem Du auf "DEFINED" abfragst - also (ungetestet) etwa so:
01.
@ECHO OFF & SETLOCAL 
02.
:ANFANG 
03.
SET NEUERUNDE=0 
04.
IF EXIST offline.txt del offline.txt 
05.
IF EXIST online.txt del online.txt 
06.
IF NOT EXIST rechner.txt (ECHO Fehler ! rechner.txt nicht gefunden ! & Pause & goto :eof) 
07.
FOR /F "tokens=1" %%i IN (rechner.txt) DO ( 
08.
    SET "PCONLINE="  
09.
    ECHO Check PC : %%i 
10.
    ping -n 1 %1 | find "TTL=" >NUL && SET "PCONLINE=1"  
11.
    IF DEFINED PCONLINE (   
12.
        ECHO %%i>>online.txt  
13.
        ECHO PC %%%i ist ON 
14.
        CALL:DO_IT %%i 
15.
    ) ELSE (  
16.
        ECHO %%i>>offline.txt 
17.
        ECHO PC %%i ist OFF 
18.
19.
20.
 
21.
IF EXIST offline.txt ( 
22.
    move offline.txt rechner.txt 
23.
    SET NEUERUNDE=1 
24.
25.
IF "%NEUERUNDE%"=="1" GOTO ANFANG 
26.
goto :eof 
27.
 
28.
:DO_IT 
29.
ECHO PC %1 wird bearbeitet ... 
30.
REM DO Irgendwas ;-) 
31.
REM Und noch viel mehr ... 
32.
GOTO:eof
Je nachem, was unter "noch viel mehr" zu verstehen ist, könnte auch das Unterprogramm ":DO_IT" ebenfalls in die Schleife eingefügt werden (anstelle von "CALL:DO_IT %%i") ...
Meine obige Variante ließe sich übrigens auch so verwenden:
01.
... 
02.
for /f "delims=" %%i in (rechner.txt) do @ping -n 1 %%i|find "TTL=">nul && ( 
03.
    ECHO %%i>>online.txt  
04.
    ECHO PC %%i ist ON 
05.
    CALL:DO_IT %%i 
06.
) || ( 
07.
    ECHO %%i>>offline.txt 
08.
    ECHO PC %%i ist OFF 
09.
10.
...
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Nummer suchen und als Variable setzen
gelöst Frage von Nick.BBatch & Shell7 Kommentare

Ich stehe vor einem Problem und hoffe es kann mir jemand helfen. Ich habe eine Textdatei in der eine ...

Batch & Shell

Variable setzen können während timeout

Frage von DontFlameMeITryMyBestBatch & Shell3 Kommentare

Guten Tag miteinander. Ich habe nun heute mein so ziemlich erstes Programm mit Batch geschrieben. Es soll für mich ...

Batch & Shell

Teil eines Strings als Variable setzen

gelöst Frage von tHe-jAyBatch & Shell2 Kommentare

Hallo, für ein kleines Batch-Script benötige ich einen Servicenamen als Variable. Den Servicenamen frage ich über folgenden Befehl ab: ...

Batch & Shell

Inhalt einer .txt als eine Variable setzen mit Batch

gelöst Frage von AlexIOTBatch & Shell3 Kommentare

Hallo Zusammen, In der Variable.txt steht immer nur ein einziger Rechnername! - wie folgt: EW085IDFV001 Ich möchte das dieser ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...