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 ?

Frage Entwicklung Batch & Shell

Mitglied: lobiwan

lobiwan (Level 1) - Jetzt verbinden

31.03.2009, aktualisiert 17:49 Uhr, 3711 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
Variable soll Variable setzen
gelöst Frage von mc-doubleyouBatch & Shell6 Kommentare

Hallo zusammen, ich versuche eben bestimmt durch eine Variable eine andere zu definieren, ich hatte gehofft das ginge so ...

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: ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 7 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 9 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...