darkbrummer
Goto Top

Auslesen eines Strings aus einer Datei, diesen als Variable setzen und dann mit einer anderen Variable kombinieren - Wo liegt der Fehler?

Hi Zusammen, ich versuche gerade eine Batch zu erstellen die mir das Leben etwas erleichtern soll.
Und nun sitze ich schon viel zu lange davor, habe eigentlich keine Ahnung von Batchgeschichten...

Es handelt sich dabei um folgendes:

REM Erstelle eine Datei namens pinglog.txt
echo PingAlot > pinglog.txt

REM definiere Umgebungsvariable b
SET b=.bla.domäne.bla

REM Schleife, hole dir aus der Datei Hostnames.txt einen Namen (%%a), und pinge die Komibnation aus dem geholten namen und der Umgebungsvariable, dann filtere und schreibs in die pinglog.txt
FOR /F "tokens=1*" %%a IN (Hostnames.txt) DO ping -n 1 %a%%b% | findstr [ >> pinglog.txt

Soweit mein Gedankengang.
Leider lässt cmd die variable %%a immer aus. und verwendet nur die %%b,
Aber nur inerhalb der Schleife, warum?

Vielen Dank!
lg
DarkBrummer

Content-Key: 160545

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

Printed on: April 18, 2024 at 09:04 o'clock

Member: bastla
bastla Feb 10, 2011 at 15:37:27 (UTC)
Goto Top
Hallo DarkBrummer und willkommen im Forum!

Gib doch der Variablen %%a (bzw dem Interpreter) eine Chance und schreibe sie in
ping -n 1 %a%%b%
auch so, wie sie wirklich heißt ... face-wink

Grüße
bastla
Member: DarkBrummer
DarkBrummer Feb 10, 2011 at 15:55:39 (UTC)
Goto Top
Hi Bastla, erstmal danke für die schnelle Antwort face-smile
Habe es auf deinen Rat hin geändert:

echo PingAlot > pinglog.txt
SET b=.bla.domain.bla.bla
FOR /F "tokens=1*" %%a IN (Hostnames.txt) DO ping -n 1 %a%%b% | findstr [ >> pinglog.txt


Aber leider habe ich nach wie vor folgende Ausgabe:

Y:\Mei Zeig\Admin>pingAlot3.bat

Y:\Mei Zeig\Admin>echo PingAlot 1>pinglog.txt

Y:\Mei Zeig\Admin>SET b=.bla.domain.bla.bla

Y:\Mei Zeig\Admin>FOR /F "tokens=1*" %a IN (Hostnames.txt) DO ping -n 1 .bla.domain.bla.bla | findstr [ 1>>pinglog.txt

Y:\Mei Zeig\Admin>ping -n 1 .bla.domain.bla.bla | findstr [ 1>>pinglog.txt

Y:\Mei Zeig\Admin>ping -n 1 .bla.domain.bla.bla | findstr [ 1>>pinglog.txt


Danke trotzdemface-smile
lg
DarkBrummer
Member: Biber
Biber Feb 10, 2011 at 16:08:41 (UTC)
Goto Top
Moin DarkBrummer,

willkommen im Forum.
Zitat von @DarkBrummer:
Hi Bastla, erstmal danke für die schnelle Antwort face-smile
Habe es auf deinen Rat hin geändert:
...
FOR /F "tokens=1*" %%a IN (Hostnames.txt) DO ping -n 1 %a%%b% | findstr [ >> pinglog.txt

Hmmja, bastla hatte noch einen kleinen Zusatz dabei
...so, wie sie wirklich heißt ...
Gemeint war damit vermutlich, dass du zum Ansprechen des Gesamtstrings aus Laufvariable %%a und gesetzter Variable %b%
NICHT schreiben solltest : %a%%b%
SONDERN : %%a%b%

Sieht zwar alles aus wie Merkels Frisur, aber bei genauem Hinschauen gibt es Unterschiede...

Grüße
Biber
Member: DarkBrummer
DarkBrummer Feb 10, 2011 at 16:14:23 (UTC)
Goto Top
:D Klasse,
ich hab den halben Tag nach der richtigen Schreibweise gesucht, und sie nicht gefunden.
Bin dann mehrfach über euere Beiträge in Google gestolpert..., aber jetzt! JUHU, es funktioniert. Denke das hat sich gelohnt, da ich jetzt keine 200 Server händisch anpingen muss. Aber es fehlen noch ein paar Kleinigkeiten. Evlt. hört ich nochmal von mir.

Dankeschön! - Spitze!
LG
Dark

PS: Danke für die nette Begrüßung im Board.
Mitglied: 60730
60730 Feb 10, 2011 at 16:54:08 (UTC)
Goto Top
moin und auch von mir ein herzhaftes Willkommen.

  • und ein paar kleiner Tipps am Rande...

"nur" in Schleifen bist du auf "nichtssagende" Variablen wie a oder A (und das sind zwei unterschiedliche) angewiesen.

  • Sinnvoller und deutlich lesbarer wäeren nein - nicht die <code></code> Blöcke - in die Batche gut passen sondern aussagekräftige Variablen.

Am liebsten nicht nur "hübsch" geschrieben, sondern auch in Gänsefüsschen. (Zeile 5)

REM Erstelle eine Datei namens pinglog.txt
echo PingAlot > pinglog.txt

REM definiere Umgebungsvariable b
SET "domain=bla.domäne.bla"  

REM Schleife, hole dir aus der Datei Hostnames.txt einen Namen (%%a), und pinge die Komibnation aus dem geholten namen und der Umgebungsvariable, dann filtere und schreibs in die pinglog.txt
FOR /F "tokens=1*" %%a IN (Hostnames.txt) DO ping -n 1 %%a.%domain% | findstr [ >> pinglog.txt  

Auch wenn die Unterschiede auf den ersten Blick so groß sein mögen, wie Meister Proper mit Lutscher im Hals und Theo Kojak - es macht einen großen Unterschied face-wink

Ping %%a.%domain% - oder Ping %%a.%%b sieht einfach schöner aus, als Ping %%a%%b.
(Und wenn du das gemacht hättest, dann gäbe es auch kein "zufällig" funktionierendes %%b)


Gruß
Member: Skyemugen
Skyemugen Feb 10, 2011 at 17:17:59 (UTC)
Goto Top
Zitat von @60730:
Auch wenn die Unterschiede auf den ersten Blick so groß sein mögen, wie Meister Proper mit Lutscher im Hals und Theo
Kojak - es macht einen großen Unterschied face-wink

Aloha T-Mo,

[OT]
irgendwann notier ich mir diese Art von Vergleichen von dir und verlege sie als Buch - made my day ;)
[/OT]

greetz André