Per batch mehrere Werte aus text lesen Möglich ?
Ich möchte aus einer Textdatei deren Name nich konstant ist Werte auslesen.
Der Name der txt datei ist wie folgt Aufgebaut:
PCName-Tag-monat-Jahr (ich möchte immer das Neuste verwenden)
Der Inhalt lautet:
Name=Server1
Ip=xx.x.xxx.xxx
Nun habe ich 10 verschiedene Pc´s somit auch jeden tag 10 txt datein.
Das root Verzeichniss aller txt datein ist "C:\ipsammlung" (es liegen alle 10 datein auf einem pc)
Was ich nun möchte ist
Eine Auflistung aller PC mit ip und auswahl per batch
Zum besseren Verständniss
Es soll später ca so ausehen:
Wenn es möglich ist so wie ich mir es denke
Danke schon mal im Voraus
mfg Opachl
Der Name der txt datei ist wie folgt Aufgebaut:
PCName-Tag-monat-Jahr (ich möchte immer das Neuste verwenden)
Der Inhalt lautet:
Name=Server1
Ip=xx.x.xxx.xxx
Nun habe ich 10 verschiedene Pc´s somit auch jeden tag 10 txt datein.
Das root Verzeichniss aller txt datein ist "C:\ipsammlung" (es liegen alle 10 datein auf einem pc)
Was ich nun möchte ist
Eine Auflistung aller PC mit ip und auswahl per batch
:index
----------------------------------------------------------------------------------
Nr Name IP
1 Server1 xx.x.xxx.xxx
2 ServerB xx.x.xxx.xxx
usw
-----------------------------------------------------------------------------------
Es soll später ca so ausehen:
if /I "%auswahl%"=="1" (
echo 1
goto :PC1
)
if /I "%auswahl%"=="2" (
echo 2
goto :PC2
)
:PC1
net send (variable der ip) Meine Meldung
goto index
:PC2
net send (variable der ip nr 2) Meine Meldun
goto index
Danke schon mal im Voraus
mfg Opachl
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71532
Url: https://administrator.de/forum/per-batch-mehrere-werte-aus-text-lesen-moeglich-71532.html
Ausgedruckt am: 19.05.2025 um 20:05 Uhr
8 Kommentare
Neuester Kommentar
Hallo Opachl und willkommen im Forum!
Zu Deiner Frage muss ich vorweg einmal Biber zitieren: Alles außer Brotschneiden geht mit Batch.
Ob das mit dem Brotschneiden immer noch gilt, können wir ihn ja mal fragen ...
Ein erster Entwurf könnte so aussehen:
Die Dateiauswahl habe ich für den Moment eingespart (auch, da mir nicht ganz klar ist, ob es etwa genügen würde, einfach die 10 neuesten Dateien nach Änderungsdatum zu verwenden) - es werden einfach alle Textdateien des Quellordners gelesen (daher zum Testen nur die jeweils passenden dort ablegen), wobei ich natürlich voraussetze, dass alle Textdateien die von Dir beschriebene Struktur aufweisen.
Der Test, ob eine getroffene Auswahl eine Zahl ist, wurde neulich hier besprochen: In Batch Datei eine Prüfung einbauen, ob ein Wert eine Zahl ist
Wasserdicht ist die Absicherung der Eingabe damit natürlich noch nicht ...
Das "net send" wird zu Testzwecken (durch das "echo" davor) nur dargestellt.
Eine Einschränkung gibt es hinsichtlich der verwendeten Texte: Ein "!" wird einfach "verschluckt", bei Verwendung zweier "!" verschwindet zusätzlich der Teil dazwischen. Grund dafür ist die "delayedexpansion", welche das "!" als Ersatz für das "%" bei Variablen benötigt.
Behübschen kann man/frau das Ganze ja im Fall des Falles später noch ...
Grüße
bastla
P.S.: Den Link zu Biber's Profil habe ich ua gesetzt, da Du dort die Links zu seinen äußerst empfehlenswerten Tutorials/Workshops findest ...
Zu Deiner Frage muss ich vorweg einmal Biber zitieren: Alles außer Brotschneiden geht mit Batch.
Ob das mit dem Brotschneiden immer noch gilt, können wir ihn ja mal fragen ...
Ein erster Entwurf könnte so aussehen:
@echo off & setlocal enabledelayedexpansion
set "Quelle=C:\ipsammlung"
set /a Anz=0
for %%d in ("%Quelle%\*.txt") do call :AddLine "%%d"
:Menue
cls
echo Nr Name IP
echo.
for /l %%i in (1,1,%Anz%) do echo %%i !Name%%i! !IP%%i!
echo.
echo 0 Beenden
echo.
echo.
set Auswahl=
set Auswahl2=
set /p "Auswahl=Rechnernummer: "
if not defined Auswahl goto :AuswahlFehler
set /a Auswahl2=%Auswahl% 2>nul
if not defined Auswahl2 goto :AuswahlFehler
if %Auswahl% neq %Auswahl2% goto :AuswahlFehler
set /a Auswahl=%Auswahl2%
if %Auswahl%==0 goto :eof
if %Auswahl% lss 1 goto :AuswahlFehler
if %Auswahl% gtr %Anz% goto :AuswahlFehler
echo.
echo %Auswahl%
echo net send !IP%Auswahl%! Meine Meldung
echo Gesendet an !Name%Auswahl%!
:Weiter
echo.
echo.
pause
goto :Menue
:AuswahlFehler
echo.
echo Bitte nur eine Zahl von 0 bis %Anz% eingeben
goto :Weiter
:AddLine
set /a Anz+=1
for /f "usebackq delims=" %%i in (%1) do set %%i
set "Name%Anz%=%Name%"
set "IP%Anz%=%IP%"
goto :eof
Der Test, ob eine getroffene Auswahl eine Zahl ist, wurde neulich hier besprochen: In Batch Datei eine Prüfung einbauen, ob ein Wert eine Zahl ist
Wasserdicht ist die Absicherung der Eingabe damit natürlich noch nicht ...
Das "net send" wird zu Testzwecken (durch das "echo" davor) nur dargestellt.
Eine Einschränkung gibt es hinsichtlich der verwendeten Texte: Ein "!" wird einfach "verschluckt", bei Verwendung zweier "!" verschwindet zusätzlich der Teil dazwischen. Grund dafür ist die "delayedexpansion", welche das "!" als Ersatz für das "%" bei Variablen benötigt.
Behübschen kann man/frau das Ganze ja im Fall des Falles später noch ...
Grüße
bastla
P.S.: Den Link zu Biber's Profil habe ich ua gesetzt, da Du dort die Links zu seinen äußerst empfehlenswerten Tutorials/Workshops findest ...
Hallo Opachl!
Ich sehe den Sinn des Ganzen nicht - eigentlich würde es genügen, wenn Du in meinem Batch oben
ersetzt durch
Was hast Du überhaupt mit dem Batch vor?
Grüße
bastla
Ich sehe den Sinn des Ganzen nicht - eigentlich würde es genügen, wenn Du in meinem Batch oben
echo.
echo %Auswahl%
echo net send !IP%Auswahl%! Meine Meldung
echo Gesendet an !Name%Auswahl%!
title *Nachricht an !Name%Auswahl%!*
cls
echo Zielhost/IP: !IP%Auswahl%!
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send !IP%Auswahl%! %b%
Was hast Du überhaupt mit dem Batch vor?
Grüße
bastla
Hallo Opachl!
Wie viele Dateien gibt es, wie sind sie (außer mit dem Datum) benannt - Server1 bis Server10?
Gibt es jeden Tag neue Dateien, so dass sie einfach anhand des Tagesdatums herausgefiltert werden können?
Werden immer alle Dateien erneuert, sodass, wie schon erwähnt, einfach das Dateidatum herangezogen werden kann?
Grüße
bastla
Wie viele Dateien gibt es, wie sind sie (außer mit dem Datum) benannt - Server1 bis Server10?
Gibt es jeden Tag neue Dateien, so dass sie einfach anhand des Tagesdatums herausgefiltert werden können?
Werden immer alle Dateien erneuert, sodass, wie schon erwähnt, einfach das Dateidatum herangezogen werden kann?
Grüße
bastla
Hallo Opachl!
Ersetze den ersten Teil (bis vor ":Menue") durch
Deine Zusatzfrage wäre einen neuen Thread wert ...
Grüße
bastla
Ersetze den ersten Teil (bis vor ":Menue") durch
@echo off & setlocal enabledelayedexpansion
set "Quelle=C:\ipsammlung"
set /a Anz=0
for %%p in (PC1 PC2 PC3 ... PC10) do (
for /f %%d in ('dir "%Quelle%\%%p-*.txt" /b /od') do set "Datei=%Quelle%\%%d"
call :AddLine "!Datei!"
)
Deine Zusatzfrage wäre einen neuen Thread wert ...
Grüße
bastla