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

Daten via findstr ein eine neue Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: Godzilla13

Godzilla13 (Level 1) - Jetzt verbinden

05.11.2010, aktualisiert 09:42 Uhr, 5697 Aufrufe, 7 Kommentare

Hallo zusammen,

vielleicht könnt ihr mir bei einem Batch in Verbindung mit findstr helfen. Ich habe schon ein wenig die anderen Beiträge studiert, finde aber nichts was 100% passt und bekomme es selber mit meinem Wissensstand auch nicht hin.

Ich habe eine Textdatei die wie folgt aufgebaut ist:
PFAD\GENERATOR>copy PFAD\Textnr_00\010000-00_00_00.xml  MODULE\010000-00_00_00.xml  
Das System kann die angegebene Datei nicht finden. 
 
PFAD\GENERATOR>copy PFAD\Textnr_81\018189-00_00_01.xml  MODULE\018189-00_00_01.xml  
        1 Datei(en) kopiert. 
 
PFAD\GENERATOR>copy PFAD\Textnr_73\017322-02_01_01.xml  MODULE\017322-02_01_01.xml  
        1 Datei(en) kopiert. 
 
PFAD\GENERATOR>copy PFAD\Textnr_73\017337-00_01_02.xml  MODULE\017337-00_01_02.xml  
        1 Datei(en) kopiert. 
usw.
Diese Liste sollte so modifiziert werden das am Ende eine neue Liste mit den einzelnen Kapiteln heraus kommt, jeweils mit einer Leerzeile als Abstand zwischen den Einträgen.
010000-00_00_00.xml 
 
018189-00_00_01.xml 
 
017322-02_01_01.xml 
 
017337-00_01_02.xml
Gerne kann mit findstr dafür eine gesonderte Textdatei erstellt werden.

Optional wären noch folgende Dinge super:

  • Das .xml kann noch entfernt werden, sodass nur die reinen Kapitelnamen erscheinen.
  • Als Dateiname den Dateinamen einer anderen Datei heranziehen welche unter PFAD\KAPITELLISTE\ als *.xml Datei zu finden ist. In dem Pfad liegt immer nur eine Datei. Bsp.: Datei 18106-01-01.xml bewirkt den Dateinamen 18106-01-01.txt
  • Angabemöglichkeit eines Ausgabepfads für die zu generierende neue Textdatei mit dem gewünschten Inhalt.

Danke schonmals! Schöne Grüße,
Godzilla13
Mitglied: bastla
05.11.2010 um 10:12 Uhr
Hallo Godzilla13!

Hinsichlich der Pfadangaben wie zB
PFAD\Textnr_00\010000-00_00_00.xml
wäre noch eine genauere Beschreibung sinnvoll - insbesondere, ob Leerzeichen vorkommen können.

Auf Basis der angegebenen Beispiele wäre die Minimalvariante (zum Testen direkt in der CMD-Shell)
for /f "tokens=3" %i in ('findstr /i "\.xml" "D:\Die Textdatei.txt"') do @for /f "delims=" %a in ("%i") do @(echo %~na & echo\)>>con
Die Ausgabe erfolgt so nur auf dem Bildschirm - zum Testen mit einer Datei als Ziel einfach "con" durch einen Pfad ersetzen ...
Als Dateiname den Dateinamen einer anderen Datei heranziehen
Dateiname wofür?

Grüße
bastla

[Edit] Fehlenden Teil der Zeile nachgereicht [/Edit]
Bitte warten ..
Mitglied: Godzilla13
05.11.2010 um 10:32 Uhr
Hi bastla,

Hinsichlich der Pfadangaben wie zB
wäre noch eine genauere Beschreibung sinnvoll - insbesondere, ob Leerzeichen vorkommen können.

Hier ein Beispiel für den kompletten Pfad:
S:\Generierung\Buchgenerierung\GENERATOR>copy S:\Daten\DATEN_XML\BAL\Sprache_01\Textnr_81\018189-00_00_01.xml  MODULE\018189-00_00_01.xml  
        1 Datei(en) kopiert.
Die Ausgabe erfolgt so nur auf dem Bildschirm - zum Testen mit einer Datei als Ziel einfach "con" durch einen Pfad
ersetzen ...
Bei der Testzeile werden mir in der ausgegebenen Textdatei nur Zeilen mit dem Text "%~na " angezeigt.

> Als Dateiname den Dateinamen einer anderen Datei heranziehen
Dateiname wofür?
Datainame für die auszugebene Datei. Dessen Namen sich je nach Kapitelliste natürlich ändert. Wäre nur eine weitere Erleichterung, Alterantiv benenne ich die Datei eben nach dem Batch per Hand kurz um.
Bitte warten ..
Mitglied: bastla
05.11.2010 um 13:06 Uhr
Hallo Godzilla13!

Sorry - da war ein nicht ganz unwichtiger Teil der Zeile beim Posten auf der Strecke geblieben - ist jetzt aber oben schon ergänzt ...
Hinsichtlich der "Dateinamen" bin ich offensichtlich etwas begriffstutzig: Wenn nur eine Liste (mit Kapiteln) erzeugt wird, wozu dann mehrere Dateinamen?
Noch eine Klarstellung zu den Pfaden: Diese enthalten demnach keine Leerzeichen?

Grüße
bastla
Bitte warten ..
Mitglied: Godzilla13
05.11.2010 um 14:31 Uhr
Nun funktioniert deine Zeile wunderbar. Schonmal vielen Dank dafür!

Zum Dateinamen, vielleicht verstehen wir uns falsch. Die Liste der Kapitel soll archiviert werden und den selben Namen haben wie die XML Datei, welche quasi die Quell-Textdatei generiert, aus der du ja oben die gewünschte neue Textdatei generierst.

Vielleicht ist das ganz umzusetzen auch viel zu umständlich, dann belassen wir es dabei. Mir ist mit dem Code oben schon sehr geholfen.

Und ja, der Pfad enthält keine Leerzeichen.

Edit: Ich habe gerade versucht die Zeile in eine .BAT Datei zu schreiben, da meldet er beim ausführen aber folgendes:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters 
ist ungültig: %~na & echo\)>>con
Bitte warten ..
Mitglied: bastla
05.11.2010 um 16:18 Uhr
Hallo Godzilla13!

In Batch sind alle Laufvariablen von "for"-Schleifen (hier also %i und %a) mit doppelten AnführungsProzentzeichen zu schreiben - zB wäre das für die zitierte Stelle dann
echo %%~na & echo\)>>con
Zu den Dateinamen: Die einzelnen Bestandteile kannst Du so erhalten (wieder für die Konsole mit nur einem Prozentzeichen):
for /f "tokens=3" %i in ('findstr /i "\.xml" "D:\Die Textdatei.txt"') do @for /f "delims=" %a in ("%i") do @(echo Pfad: %~dpa & echo Name: %~na & echo Typ: %~xa & echo Name + Typ: %~nxa)>>con
Details dazu mit "for /?" (ziemlich am Ende) ...

Grüße
bastla

[Edit] "%" werden jetzt auch so genannt [/Edit]
Bitte warten ..
Mitglied: Godzilla13
08.11.2010 um 08:01 Uhr
Kannst du mir das mit den Anführungszeichen nochmals hier posten? Ich bekomms gerade nicht hin und oben hast du keine Anführungszeichen drin nur noch ein zusätzliches %.
Das Problem mit dem Dateinamen verstehen wir uns immer noch falsch, aber lösen wir erstmal das Batch Datei Problem .


[Edit]Problem erkannt und gelöst[/Edit]

Dann zum Dateinamen: Der Dateinamen soll nicht aus dem Inhalt der Textdatei generiert werden. Im Pfad XY (Der Pfad unterscheidet sich vom Pfad der Quelltextdatei, zusätzliche Pfadangabe als notwendig)liegt eine .xml Datei. Das Batch müsste lediglich nachschauen wie diese Datei heißt und genau so die .TXT Datei benennen welche das Batch generiert.
Bitte warten ..
Mitglied: Godzilla13
08.11.2010 um 09:42 Uhr
So ich habe das mit dem Dateinamen nun mit einer weiteren "for" Zeile hinbekommen.

Vielen Dank für deine Hilfe mit dem Batch.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...