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

Zeilen auslesen mit BatchProgramm

Frage Entwicklung Batch & Shell

Mitglied: Madej1

Madej1 (Level 1) - Jetzt verbinden

21.11.2007, aktualisiert 26.11.2007, 5061 Aufrufe, 14 Kommentare

Wie kann ich mit einem Batch Programm Zeilen auslesen, ohne das der Zeilenumbruch kommt? Und Durch den Zeilenumbruch wo angegeben wird kann ich kein Pfad setzten, weil es dann immer [3] \\server07/1 wird... .
In der Text Datei, welche ausgelsen werden sollen stehen verschiedene Pfade.

So sieht mein Befehl zum auslesen aus:
FOR /F %%i in ('find/n "1" E:\*\Quellpfade.txt') do set Quellpfad=%%i

Die Text Datei schaut so aus:

[Quellpfade]
[1.Quelle]
\\server07\1
[2. Quelle]
\\server07\2
[3. Quelle]
\\server07\3
[4. Quelle]
\\server07\4
[5. Quelle]
\\server07\5

Würde mich über Hilfe sehr freuen
Mitglied: Biber
21.11.2007 um 10:44 Uhr
Moin Madej1,

willkommen im Forum.

Hier passen Dateiformat und Werkzeug nicht wirklich gut zusammen.

Mit Batch-Mitteln lassen sich einzelne Zeilen relativ gut verarbeiten im Sinne von "im ersten Schritt die richtige Zeile aus einer Textdatei extrahieren, im zweiten Schritt den Inhalt dieser Zeile auswerten".

Nicht zu gut geeignet ist Batch für baumartig strukturierte Textdateien wie zum Beispiel die für M$ so typische Ini-Datei-Struktur mit [Sections] und "Entry=value"-Zeilen.

Deine Textdatei-Auswertung ist zwar mit ein paar ineinandergeschraubten FOR-Anweisungen machbar, aber nur unter sehr, sehr wackligen Grundannahmen:
  • der [Section]-Text muss ganz exakt geschrieben sein also nicht wie im Beispiel mal "1. Quelle" und mal "2(Leerzeichen).Quelle"
  • es dürfen keine Leer-/Komentarzeilen drin sein- der Eintrag ("\\server..") muss unmittelbar auf die [Section]-Zeile folgen..

....an diesem Punkt habe ich die handwerkliche Umsetzung beiseite gelegt.

Meine Frage vor weiteren Aktivitäten:
  • ist das Format der "Quellpfade-Datei" zwingend vorgegeben oder kannst Du es bestimmen?
  • wenn zwingend vorgegeben: kannst/darfst Du auch VBSkript und/oder Utilities (einen INI-File-Leser z.B.) einsetzen.
  • im allerallerallerdümmsten Fall (Format fest vorgegeben UND nur native Batch möglich): kannst Du sicherstellen, dass in der Quellpfade-Datei nur so restriktiv eingegeben wird wie oben skizziert?

Grüße
Biber
Bitte warten ..
Mitglied: ahe
21.11.2007 um 10:52 Uhr
Hallo Madej1,

eines der ewähnten Ini-Tools kann man hier http://home.mnet-online.de/horst.muc/wbat32d.htm#inifile
finden.

Es ist relativ einfach in eine Batch zu integrieren...

mfg
Axel
Bitte warten ..
Mitglied: Madej1
21.11.2007 um 11:19 Uhr
Danke erst mal für eure Interesse. Also es ist so das Format der "Quellpfade-Datei" sollte eine .ini sein. Und ich kann sicherstellen das dann nur so eingegeben wird wie oben skizziert sollte, aber noch übersichtlich bleiben . Und ich darf kein VBSkript machen oder utilities nehmen ... .

@ahe danke für deine mühe, aber darf es leider nicht benutzen.

Gruß Madej
Bitte warten ..
Mitglied: ahe
21.11.2007 um 11:31 Uhr
Mmh,

freie Tools dürfen also nicht verwendet werden? Ich denke dann auch Tools aus den M$ ResourceKits auch nicht (kosten ja z. T. auch etwas...) oder die Support Tools von M$... oder?

Wo fangen denn bei der Definition die Utilities an, dürfen nur betriebssystemeigene "Utilities" verwendet werden? Und wenn ja, von welchem Betriebssystem bzw. von welchem ServicePack-Level sprechen wir dann?



mfg
Axel
Bitte warten ..
Mitglied: Madej1
21.11.2007 um 11:37 Uhr
Also so Utilities von M$ aus dem ResourceKit, könnte ich benutzen, aber dann sollte das Utilitie kostenfrei ... also betriebseigene. Also von Von Xp Prof sp2. Ich bin grad total ratlos und krieg des net hin ^^

Gruß Madej
Bitte warten ..
Mitglied: ahe
21.11.2007 um 12:14 Uhr
Hallo Madej,

nur die Ruhe...

Kannst Du etwas zu Biber's Fragen sagen? Ich glaube er hatte da schon eine Idee...

mfg
Axel
Bitte warten ..
Mitglied: Biber
21.11.2007 um 12:57 Uhr
Na ja,

wie bekannt ist, geht ja alles außer Brotschneiden mit Batch...

Meine Strategie wäre, wenn denn wirklich alle ungünstigen Randbedingungen von oben zusammentreffen, zuerst diese -ich nenne es mal Ini-Datei- in eine Form zu bringen, mit der ich etwas anfangen kann.

Wenn das also die "Ini-Datei" namens %temp%\Quellpfade.txt wäre ....
01.
[Quellpfade] 
02.
[1. Quelle] 
03.
\\server07\1 
04.
[2. Quelle] 
05.
\\server07\2 
06.
[3. Quelle] 
07.
\\server07\3 
08.
[4. Quelle] 
09.
\\server07\4 
10.
[5. Quelle] 
11.
\\server07\5
...dann würde ich mit diesem aufgemotzten Einzeiler namens ini2tmp.bat...
01.
::----snipp ini2tmp.bat  
02.
@echo off & setlocal 
03.
Set "q=%Temp%\quellpfade.txt" 
04.
@for /L %%a in (1,1,5) do ( 
05.
  for /f "delims=: tokens=1,2" %%i in ('findstr /n $ "%q%"^|findstr ":[%%a"') do @( 
06.
   for /f %%x in ('set /a %%i+1') do @( 
07.
      For /f "tokens=1,* delims=:" %%y in ('findstr /n $ "%q%"^|findstr "%%x:"') do @echo %%j[%%z] 
08.
)))
diese Zeilen erzeugen (Bsp. am CMD-Prompt):
01.
>ini2tmp 
02.
[1. Quelle][\\server07\1] 
03.
[2. Quelle][\\server07\2] 
04.
[3. Quelle][\\server07\3] 
05.
[4. Quelle][\\server07\4] 
06.
 
Diese Struktur wiederum kann ich schmerzfrei nach whatever durchsuchen.
Also meinetwegen in eine Datei "%temp%\QuellpfadePlattgeklopft.txt" umleiten mit
ini2tmp >"%temp%\QuellpfadePlattgeklopft.txt"

und auf diese Datei dann mit Find [einenbestimmtenSuchtext] und nach Tokens, die mit "][" als Delimiter getrennt sind unterscheiden.

Grüße
Biber

P.S. Das soll jetzt die Strategie-Skizze sein, kein in sich geschlossener Batch.
Bitte warten ..
Mitglied: Madej1
21.11.2007 um 12:57 Uhr
Danke für deine schnelle Antwort ich werde deinen Beitrag jetzt erstmal nochmal in ruhe durchlesen und dann versuchen . Ich geb dann eine Rückmeldung.

Gruß Madej

p.s. Finde dass das Forum hier das beste ist, wo es gibt!

edit:
danke für eure Hilfe hab es geschafft.
Bitte warten ..
Mitglied: miniversum
21.11.2007 um 18:10 Uhr
Wenn die Datei wirklich immer so aussieht:
01.
[Quellpfade] 
02.
[1. Quelle] 
03.
\\server07\1 
04.
[2. Quelle] 
05.
\\server07\2 
06.
[3. Quelle] 
07.
\\server07\3 
08.
[4. Quelle] 
09.
\\server07\4 
10.
[5. Quelle] 
11.
\\server07\5
könnte man das ganze dann nicht einfach so auslesen?
01.
@echo off 
02.
set "zufinden=3. Quelle" 
03.
set "quelldatei=Quellpfade.txt" 
04.
 
05.
set "line=" 
06.
FOR /F "delims=][" %%i in ('find /N "[%zufinden%]" "quelldatei"') do if not defined line set line=%%i 
07.
set "wert=" 
08.
FOR /F "skip=%line% delims=" %%i in ('"quelldatei"') do if not defined wert set wert=%%i 
09.
 
10.
echo %zufinden% ist %wert%
miniversum
Bitte warten ..
Mitglied: Biber
21.11.2007 um 18:52 Uhr
@miniversum

Ja, Deine Lösung ist natürlich weniger verschraubt (oder verschroben?) als mein Ansatz.

Würde ich eher einsetzen als das von mir gepostete Konstrukt.

Nur (so fing ja die ganze Diskussion an):
Die Mimik, eine Ini-Datei nach einem Section-Namen zu durchsuchen und dann blind die erste Zeile zu verwerten..... hey, was nützen mir bei solchen va-banque-Aktionen irgendwelche kunstvoll programmierten Algorithmen??

Das kann aus meiner Sicht nicht sichergestellt werden, dass jeder, der vielleicht mal in der der Inidatei eine neue Quelle einpflegen muss, auch KEINE Kommentarzeilen einfügt oder keine auskommentierten stehen lässt.
Und das ist ja auch bestimmt nichts, was ich als Admin unterstütze - dass in Textdateien keine Möglichkeit gegeben ist, wenigsten neben den programmlesbaren Infos auch menschenlesbare Kommentare unterzubringen.

Vor diesenm Hintergrund meine Frage vorhin nach dem Inidatei-Leser.
Denn wenn schon, dann sollte der Algorithmus sein:
- Suche nach Section {suchSection}
- wenn nicht vorhanden --> Fehlerbehandlung oder Defaultwert annehmen
- sonst: suche innerhalb der Section {suchSection} nach Key={Suchkey}
- wenn gefunden: lese das value nach dem Gleichheitszeichen
- sonst --> Fehlerbehandlung oder Defaultwert annehmen

Und wenn bzw. solange ich nichts habe, was mir eine solche Struktur ausliest, solange würde ich für Batch-Verarbeitung eine Strategie "alle zusammengehörigen Infos in einer Zeile halten" anstreben.

Grüße
Biber
Bitte warten ..
Mitglied: Madej1
23.11.2007 um 16:05 Uhr
Hab nochmal ne frage. Wie kann ich mit einem Batch-Programm eine text datei die zeien zählen, bzw , wenn di eanzah unbekannt ist. Es können auch mal 20 Zeilen sein oder 70 Zeilen. Diese muss ich dann auch noch einlesen und einer Variablen zuteilen?

Gruß Madej
Bitte warten ..
Mitglied: Biber
23.11.2007 um 17:32 Uhr
Moin Madej1,

eine der Möglichkeiten wäre im Batch folgende FOR/F-Anweisung:

01.
..... 
02.
FOR /F "delims=:" %%i in ('findstr /n $ "%dieTextDatei%"') do set linesCount=%%i
Danach steht in der Variablen %LinesCount% die Anzahl Zeilen.

Ist denn der eigentliche Anlass Deines Beitrags inzwischen beantwortet oder klemmt es noch irgendwo?

Grüße
Biber
Bitte warten ..
Mitglied: Madej1
26.11.2007 um 07:56 Uhr
Ja danke für die ganze Hilfe. Bis jetzt hab ich keine weiteren Fragen.

Gruß MAdej
Bitte warten ..
Mitglied: Biber
26.11.2007 um 08:03 Uhr
Moin Madej,

dann mach ich hier erstmal dicht.

Angenehme Woche und Danke für die Rückmeldung.
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...