Wie kann ich eine einzelne Textdatei in mehrere Dateien mit Batch zerlegen?

2073
Philip

Ich habe folgendes Programm ausgeführt:

@echo off cls set /p "filename=type file name>" setlocal enabledelayedexpansion for /r E:\ %%a in (*) do if "%%~nxa"=="%filename%" ( echo %%~dpnxa >>path.txt ) 

Ich habe eine Ausgabedatei, path.txtdie enthält:

E:\new.txt  E:\Redmi\new folder\new.txt E:\windows\new folder\new folder\new.txt 

Ich mag es, diese in separaten Dateien zu haben,

E:\new.txt im path1.txt

E:\Redmi\new folder\new.txt im path2.txt

E:\windows\new folder\new folder\new.txt im path3.txt

1
Verwenden Sie keinen statischen Wert für die Zieldatei, sondern eine (Zähl-) Variable oder teilen Sie das Ergebnis nach Zeilenumbrüchen auf. Seth vor 6 Jahren 0

2 Antworten auf die Frage

1
DavidPostill

Wie kann ich einzelne Textdateien zeilenweise in mehrere Textdateien unterteilen?

Aufbauend auf dem Kommentar von Seth können Sie die folgende Batchdatei verwenden:

@echo off cls setlocal enabledelayedexpansion set /p "filename=type file name>" rem initialise counter to 1 set _count=1 for /r E:\ %%a in (*) do if "%%~nxa"=="%filename%" ( echo %%~dpnxa >>path!_count!.txt rem increment the counter set /a _count+=1 ) endlocal 

Anmerkungen:

  • Ich habe die setlocalZeile verschoben, um zu verhindern, dass die Variable filenamein die aufrufende cmdShell eindringt.

Lesen Sie weiter

Wie geschrieben, wird dies fehlschlagen, wenn ein Teil eines Ausgabepfads ein Ausrufezeichen enthält. Die Lösung erfordert, dass die verzögerte Erweiterung innerhalb der Schleife ein- und ausgeschaltet wird. Ich ziehe es jedoch vor, FINDSTR / N in Verbindung mit FOR / F zu verwenden, um die Zeilennummern ohne verzögerte Erweiterung zu erhalten (siehe [meine Antwort] (https://superuser.com/a/1272862/109090)). dbenham vor 6 Jahren 1
1
dbenham

Ich habe eine viel einfachere und wahrscheinlich schnellere Lösung für Sie:

  • Verwenden Sie DIR /S /B /A-Dstatt FOR /R, um die Pfadliste abzurufen. Dadurch entfällt die Notwendigkeit einer IFAussage.
  • Pipe to FINDSTR /N, passend am Zeilenanfang, um die Zeilennummer für den Namen der Ausgabedatei zu erhalten.
  • Führen Sie den gesamten FOR /FVorgang aus, um die Ergebnisse zu iternieren und in die Zeilennummer und den Pfad jeder Zeile zu parsen.
@echo off setlocal set /p "filename=type file name>" for /f "delims=: tokens=1*" %%A in ( 'dir /s /b /a-d "E:\%filename%" ^| findstr /n "^"' ) do >"path%%A.txt" echo %%B 

Wenn es mein Skript wäre, würde ich den Zieldateinamen als Argument übergeben und nicht als Aufforderung dazu auffordern:

@echo off for /f "delims=: tokens=1*" %%A in ( 'dir /s /b /a-d "E:\%~1" ^| findstr /n "^"' ) do >"path%%A.txt" echo %%B