Batch [/VBScript] Längere Zeile mit Dateipfaden separieren

Xintaur

Cadet 3rd Year
Registriert
Sep. 2014
Beiträge
48
Guten Abend,


im Grunde genommen geht es bei meiner Frage darum, eine einzige Zeile in einer Textdatei, in der verschiedene Dateipfade enthalten sind zu trennen.

Beispielzeile:
"C:\Ordner a\Datei a" "C:\Ordner b\Datei b" "D:\Ordner c\Ordner c" usw...

Jetzt soll das Skript optimalerweise diese Zeile auslesen und die einzelnen Pfade zeilenweise in eine neue Textdatei schreiben (mit oder ohne Anführungszeichen).

Neue Textdatei:
C:\Ordner a\Datei a
C:\Ordner b\Datei b
D:\Ordner c\Datei c

Wie ich eine Zeile aus einer Textdatei auslese ist mir in durchaus bekannt, wie ich dann die Dateipfade aus dem String auslesen kann allerdings nicht.

Ob als Batch oder VBS ist mir relativ egal. Zur Not auch andere Scriptsprachen, allerding sollten diese mit Windows Bordmitteln auskommen.


Schonmal Danke für jegliche Antworten und Hilfe im Vorraus :daumen:


Viele Grüße

Daniel
 
Zuletzt bearbeitet:
Im Prinzip geht es dir doch nur darum, einen Zeilenumbruch hinter jedem >" < (inkl. Leerstellenhinter den Anführungsstrichen) zu generieren, oder täusche ich mich?
 
Je_Tho schrieb:
Im Prinzip geht es dir doch nur darum, einen Zeilenumbruch hinter jedem >" < (inkl. Leerstellenhinter den Anführungsstrichen) zu generieren, oder täusche ich mich?

Genau, allerdings weiß ich nicht wirklich, wie das in einem Script realisierbar ist.
Ergänzung ()

Ok, ich habe mittlerweile eine Lösung gefunden.

Hier der kommentierte Code der fertigen Batchdatei, für jeden, den es interessiert:
Code:
Bessere Lösung weiter unten...
Wer eine weniger umständliche Lösung kennt, oder weiß, wie man in dem Powershell Befehl die <"> escapen kann, darf sein Wissen gerne mit mir teilen :D

Diese Zeile würde sich eigentlich auch gut dafür eignen, allerdings weiß ich nicht, wie ich einen Zeilenumbruch erzeuge. /n funktioniert schonmal nicht.
Code:
for /F "usebackq delims=" %%I in ("Datei.txt") do set "Line=%%I" & set "Line=!Line:" "=  <Zeilenumbruch>  !" & >>"Datei3.txt" echo !Line!
 
Zuletzt bearbeitet:
Wenn ich es so schreibe
Code:
@echo off
setlocal EnableDelayedExpansion

set LF=^
for /F "usebackq delims=" %%I in ("Datei.txt") do set "Line=%%I" & set "Line=!Line:" "=!LF!!" & >>"Datei3.txt" echo !Line!
Funktioniert es leider nicht. Wo genau liegt dann mein Fehler?
 
Der Kommentar heißt nicht umsonst "Two empty lines required".

Code:
@echo off
setlocal EnableDelayedExpansion

for /F "usebackq delims=" %%a in ("Datei.txt") do set line=%%a 

:: führendes und abschließendes quote entfernen
set line=!line:~1,-2!

:: " " durch Linefeed ersetzen
set line=!line:" "=^

!

:: Ausgabe in Datei
for /f "delims=" %%b in ("!line!") do (
	echo %%b>>"Datei3.txt" 
)
 
Andreas_ schrieb:
Der Kommentar heißt nicht umsonst "Two empty lines required".
Hätte ich wohl beachten sollen ...

Vielen Dank, jetzt funktioniert es!
Ergänzung ()

Hierzu möchete ich kurz hinzufügen, dass das Einlesen von längeren Zeilen nicht durch
Code:
set /P LINE=<"Datei.txt"
geschehen kann. Denn mit set /P kann man nur eine Länge von maximal 1024 Zeichen einlesen, während man mit der for-Schleife bis zu 8191 Zeichen (Maximale Länge eines Strings) einlesen kann.
 
Zurück
Oben