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

Per batch mehrere Werte aus text lesen Möglich ?

Frage Entwicklung Batch & Shell

Mitglied: Opachl

Opachl (Level 1) - Jetzt verbinden

21.10.2007, aktualisiert 22.10.2007, 6990 Aufrufe, 8 Kommentare

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
01.
:index 
02.
---------------------------------------------------------------------------------- 
03.
Nr          Name                                         IP 
04.
 
05.
1            Server1                                      xx.x.xxx.xxx 
06.
2            ServerB                                      xx.x.xxx.xxx 
07.
 
08.
usw 
09.
 
10.
-----------------------------------------------------------------------------------
Zum besseren Verständniss

Es soll später ca so ausehen:
01.
if /I "%auswahl%"=="1" ( 
02.
echo 1 
03.
goto :PC1 
04.
05.
 
06.
if /I "%auswahl%"=="2" ( 
07.
echo 2 
08.
goto :PC2 
09.
10.
 
11.
:PC1 
12.
net send (variable der ip) Meine Meldung 
13.
goto index 
14.
 
15.
:PC2 
16.
net send (variable der ip nr 2) Meine Meldun 
17.
goto index
Wenn es möglich ist so wie ich mir es denke
Danke schon mal im Voraus
mfg Opachl
Mitglied: bastla
22.10.2007 um 00:08 Uhr
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Quelle=C:\ipsammlung" 
03.
set /a Anz=0 
04.
for %%d in ("%Quelle%\*.txt") do call :AddLine "%%d" 
05.
 
06.
:Menue 
07.
cls 
08.
echo Nr Name       IP 
09.
echo. 
10.
for /l %%i in (1,1,%Anz%) do echo %%i  !Name%%i!  !IP%%i! 
11.
echo. 
12.
echo 0 Beenden 
13.
echo. 
14.
echo. 
15.
 
16.
set Auswahl= 
17.
set Auswahl2= 
18.
set /p "Auswahl=Rechnernummer: " 
19.
 
20.
if not defined Auswahl goto :AuswahlFehler 
21.
set /a Auswahl2=%Auswahl% 2>nul 
22.
if not defined Auswahl2 goto :AuswahlFehler 
23.
if %Auswahl% neq %Auswahl2% goto :AuswahlFehler 
24.
set /a Auswahl=%Auswahl2% 
25.
if %Auswahl%==0 goto :eof 
26.
if %Auswahl% lss 1 goto :AuswahlFehler 
27.
if %Auswahl% gtr %Anz% goto :AuswahlFehler 
28.
 
29.
echo. 
30.
echo %Auswahl% 
31.
echo net send !IP%Auswahl%! Meine Meldung 
32.
echo Gesendet an !Name%Auswahl%! 
33.
 
34.
:Weiter 
35.
echo. 
36.
echo. 
37.
pause 
38.
goto :Menue 
39.
 
40.
:AuswahlFehler 
41.
echo. 
42.
echo Bitte nur eine Zahl von 0 bis %Anz% eingeben 
43.
goto :Weiter 
44.
 
45.
:AddLine 
46.
set /a Anz+=1 
47.
for /f "usebackq delims=" %%i in (%1) do set %%i 
48.
set "Name%Anz%=%Name%" 
49.
set "IP%Anz%=%IP%" 
50.
goto :eof
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: http://www.administrator.de/In_Batch_Datei_eine_Pr%C3%BCfung_einbauen%2 ...
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 ...
Bitte warten ..
Mitglied: Opachl
22.10.2007 um 17:07 Uhr
Danke für die schnelle Antwort habe noch eine weitere Idee:
Habe dabei allerdings ein Problem beim erstellen meiner Server.txt

Server.bat
@echo off
for /f "tokens=1-9 delims=:][ " %%a in (Server.txt) do call :processLine %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :listall

:processline
set "pcn1=%1"
set "pci1=%2"
set "pcn2=%3"
set "pci2=%4"
set "pcn3=%5"
set "pci3=%6"
set "pcn4=%7"
set "pci4=%8"
set "pcn5=%9"
goto :eof

:listall
echo.
echo Bitte Auswahl treffen
echo
echo.
echo NR Name IP
echo 1 %pcn1% %pci1%
echo 2 %pcn2% %pci2%
echo 3 %pcn3% %pci3%
echo 4 %pcn4% %pci4%
echo 5 %pcn5%
echo.
echo 6 Zuruek
echo.
echo
echo.

:menue
set /P auswahl=NR:

if /I "%auswahl%"=="1" (
echo 1
goto :PC1
)

if /I "%auswahl%"=="2" (
echo 2
goto :PC2
)

if /I "%auswahl%"=="3" (
echo 3
goto :PC3
)

if /I "%auswahl%"=="4" (
echo 4
goto :PC4
)

if /I "%auswahl%"=="5" (
echo 5
goto :PC5
)

if /I "%auswahl%"=="6" (
echo 6
call Batmenue.bat
)

:PC1
title *Nachricht an %pcn1%*
cls
echo Zielhost/IP: %pci1%
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send %pci1% %b%
goto :listall

:PC2
title *Nachricht an %pcn2%*
cls
echo Zielhost/IP: %pci2%
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send %pci2% %b%
goto :listall

:PC3
title *Nachricht an %pcn3%*
cls
echo Zielhost/IP: %pci3%
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send %pci3% %b%
goto :listall

:PC4
title *Nachricht an %pcn4%*
cls
echo Zielhost/IP: %pci4%
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send %pci4% %b%
goto :listall

:PC5
title *Nachricht an %pcn5%*
cls
echo Zielhost/IP: %pci5%
cls
echo Nachricht:
echo:
set /p b=
cls
echo Anzahl:
echo:
set /p c=
FOR /L %%h IN (0,1,%c%) DO net send %pci5% %b%
goto :listall

hiermit mache ich die server.txt
copy /b C:\ipsammlung\*.txt Server.txt

Das Ergebniss ist dann

PC1:xx.x.xxx.xxx: PC2:xx.x.xxx.xxx: PC3:xx.x.xxx.xxx: PC4:xx.x.xxx.xxx:

Mein Script oben kann das aber nur verarbeiten wenn die server.txt keine leerzeichen hat und immer das letzte doppelpunkt zeichen muss weg.
Gibt es da ne möglich keit die txt abzuändern oder vlt in der anderen txt datei?
Bitte warten ..
Mitglied: Opachl
22.10.2007 um 17:23 Uhr
Nun es sollten schon immer die neusten sein da es ja sonnst doppelte werte gibt zb:


Server1-11-10-06.txt
Name=Server1
Ip=xx.x.xxx.xxx


Server1.12.10.06.txt
Name=Server1
Ip=xx.x.xxx.xx2

Dann Würde es bei dir ja so ausehen
Nr Name IP
1 Server1 xx.x.xxx.xxx
2 Server1 xx.x.xxx.xx2

Deshalb benötige ich immer die neuste datei von jedem pc

Aber das Script ist echt super nochmals danke
Gruß Opachl
Bitte warten ..
Mitglied: bastla
22.10.2007 um 17:25 Uhr
Hallo Opachl!

Ich sehe den Sinn des Ganzen nicht - eigentlich würde es genügen, wenn Du in meinem Batch oben
01.
echo. 
02.
echo %Auswahl% 
03.
echo net send !IP%Auswahl%! Meine Meldung 
04.
echo Gesendet an !Name%Auswahl%!
ersetzt durch
01.
title *Nachricht an !Name%Auswahl%!* 
02.
cls 
03.
echo Zielhost/IP: !IP%Auswahl%! 
04.
cls 
05.
echo Nachricht: 
06.
echo: 
07.
set /p b= 
08.
cls 
09.
echo Anzahl: 
10.
echo: 
11.
set /p c= 
12.
FOR /L %%h IN (0,1,%c%) DO net send !IP%Auswahl%! %b%
Was hast Du überhaupt mit dem Batch vor?

Grüße
bastla
Bitte warten ..
Mitglied: bastla
22.10.2007 um 17:30 Uhr
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
Bitte warten ..
Mitglied: Opachl
22.10.2007 um 20:51 Uhr
ich habe ca 10 pc´s die jeden Tag um ca 12 uhr mittags per Backup die txt datei anlegen als Report der Name beinhaltet immer

pcname-tag-monat-jahr.txt

dh nach 1 woche hätte ich ca
70 datein die alle mit dem jeweiligen pcnamen beginnen darauf folgt dann dass erstell datum.

das script müsste also den namen der txt datein lesen und für jeden gefunden namen nur jeweils das neuste dokument(datum) öffnen.

Wenn das geht wäre echt super ich habe echt keine idee wie ich das machen soll

mfg Opachl


Noch ne frage ich steh grade aufm Schlauch wie kann ich mehrere Festplatten durchsuchen nach einem bestimmten Ordnernamen zb "Bilder" und diesen möchte ich dann per xcopy auf ein anderes verszeichniss kopieren zb yxc:\test\bilder

danke wenn das noch sagen könntest
hast mir aber schon sehr geholfen
Bitte warten ..
Mitglied: bastla
22.10.2007 um 21:23 Uhr
Hallo Opachl!

Ersetze den ersten Teil (bis vor ":Menue") durch
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Quelle=C:\ipsammlung" 
03.
set /a Anz=0 
04.
for %%p in (PC1 PC2 PC3 ... PC10) do ( 
05.
	for /f %%d in ('dir "%Quelle%\%%p-*.txt" /b /od') do set "Datei=%Quelle%\%%d" 
06.
	call :AddLine "!Datei!" 
07.
)
Deine Zusatzfrage wäre einen neuen Thread wert ...

Grüße
bastla
Bitte warten ..
Mitglied: Opachl
22.10.2007 um 22:40 Uhr
danke nun geht alles

mfg Opachl
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Batch & Shell
Freigabe von Ethernet durch Batch-Datei erteilen???Möglich? (15)

Frage von DaTobsn zum Thema Batch & Shell ...

XML
gelöst XML - XSLT Formatierung mehrere verschiedene Werte (13)

Frage von chrisen zum Thema XML ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...