TXT-Dateien in einer bestimmten Reihenfolge zusammenführen

TXT-Dateien in einer bestimmten Reihenfolge zusammenführen

Ich habe einen Satz von 300 Kapiteln mit den Namen „Kapitel 1.txt“, „Kapitel 2.txt … Kapitel 300.txt“]

Das Ziel besteht darin, eine kombinierte TXT-Datei mit allen Kapiteln in der richtigen Reihenfolge zu erstellen.

Jede Datei ist so formatiert, dass die erste Zeile der Kapiteltitel und der Rest der Datei der Inhalt des Kapitels ist.

Ich habe es versucht

kopiere *.txt neueDatei.txt

Dies hat die Datei newfile.txt mit zwei Problemen generiert.

Problem 1 – Die Dateien waren in der Reihenfolge Kapitel 1, Kapitel 10, Kapitel 100, Kapitel 11 … angeordnet, also wie erwartet in der Reihenfolge Kapitel 1, Kapitel 2, Kapitel 3 …

Problem 2 - Wie erwähnt ist die erste Zeile jeder Datei der Titel. Beim Zusammenführen dieser Dateien wird die letzte Zeile des vorherigen Kapitels in dieselbe Zeile gesetzt wie der Kapiteltitel des nächsten Kapitels.

Wie kann ich das oben genannte Problem beheben?

Antwort1

@echo off

cd /d "%~dp0" && set "_c=10000" && setlocal enabledelayedexpansion

for /l %%L in (1 1 300)do for /f tokens^=1* %%i in ('%__AppDir__%where.exe .:Chapter?%%~L.txt')do (
    set /a "_c+=1" && call set "_new=Chapter !_c:~-4!.txt" && rename ".\Chapter?%%~L.txt" "!_new!")

for /f tokens^=* %%i in ('%__AppDir__%where.exe .:Chapter*.txt')do echo;>>"%%~dpnxi"
copy ".\Chapter*.txt" ".\newfile.txt" & endlocal 

  • Sie können .\renameIhre Dateien in eine Reihenfolge bringen, die einer alphanumerischen und nicht nur einer numerischen Sequenz entspricht.

1.Ersetzen Sie es durch den vollständigen Pfad des Ordners, in dem sich Ihre Dateien befinden.

cd /d "%~dp0" cd /d  "D:\Full\Path\To\Folder

2.Verwenden Sie eine Schleife, um die Reihenfolge zu erhalten, in der Sie von 1 bis 300 gehen (1 in 1, inkrementiert um 1).

for /l %%L in (1 1 300)do ...

3.Eine vordefinierte Variable mit 2 zusätzlichen Ziffern, die uns eine oder mehrere führende Nullen liefert, die innerhalb der Schleife inkrementiert werden, um beim Umbenennen nur die letzten 4 Ziffern zu verwenden.

set "_c=10000" 
set /a "_c+=1" && call set "_new=Chapter !_c:~-4!.txt"

4.Eine zusätzliche for /FSchleife listet alle Dateien in der richtigen Reihenfolge auf und befolgt dabei for /Lauch die Schleife in der Reihenfolge 1 bis 300.

for /f tokens^=1* %%i in ('%__AppDir__%where.exe .:Chapter?%%~L.txt')do 

5.Mit der in der Schleife inkrementierten Variable verwenden Sie substring, um Ihre Dateien umzubenennen m, beginnend mit Nullen

:: Original Name    <==>   New File Name
:: -----------------------------------------
:: Chapter 1.txt    <==>   Chapter 0001.txt
:: Chapter 10.txt   <==>   Chapter 0010.txt
:: Chapter 100.txt  <==>   Chapter 0100.txt

set "_c=10000"
 
set /a "_c+=1" && call set "_new=Chapter !_c:~-4!.txt"

rename ".\Chapter?%%~L.txt" "!_new!"

6.Wenn die Ausführungen der Doppelschleife abgeschlossen sind, führen Sie „use“ aus, echoum am Ende jeder Ihrer Dateien die zusätzliche Zeile hinzuzufügen …

for /f tokens^=* %%i in ('%__AppDir__%where.exe .:Chapter*.txt')do echo;>>"%%~dpnxi"

7.Nach Abschluss der oben genannten Verarbeitung können Sie Ihren Befehl ausführen und das gewünschte Ergebnis erhalten:

copy ".\Chapter*.txt" ".\newfile.txt"

  • Bem.:Ich weiß nicht, welche Kodierung Ihre Dateien haben, aber ich nehme an, dass eine /bInärkopie die letzte Zeile nicht überschreibt.
@echo off

cd /d "%~dp0" && set "_c=10000" && setlocal enabledelayedexpansion

for /l %%L in (1 1 300)do for /f tokens^=1* %%i in ('%__AppDir__%where.exe .:Chapter?%%~L.txt')do (
    set /a "_c+=1" && call set "_new=Chapter !_c:~-4!.txt" && rename ".\Chapter?%%~L.txt" "!_new!")

copy /b ".\Chapter*.txt" ".\newfile.txt" & endlocal 

Zusätzliche Ressourcen:

Antwort2

Kopieren Sie den Stapel in den Ordner, in dem sich die TXT-Dateien befinden, und führen Sie Folgendes aus:

@echo off

:: Set the name of the new concatenated file here:
set NewFile=NewFile.txt

If not exist "%NewFile%" copy NUL "%NewFile%"

for /L %%a in (1,1,300) do If exist "%Chapter %%a.txt" copy "%NewFile%" + "Chapter %%a.txt"& echo.>>"%NewFile%" &echo.>>"%NewFile%"

verwandte Informationen