Chapter 1.txt, Chapter 2.txt... Chapter 300.txt]라는 이름의 300개 챕터 세트가 있습니다.
목표는 이러한 모든 장을 순서대로 포함하는 결합된 .txt 파일을 만드는 것입니다.
각 파일의 첫 번째 줄은 장 제목이고 파일의 나머지 부분은 장의 내용으로 구성되어 있습니다.
나는 노력했다
*.txt newfile.txt 복사
이로 인해 두 가지 문제가 있는 newfile.txt가 생성되었습니다.
문제 1 - 파일은 1장, 10장, 100장, 11장... 1장, 2장, 3장 순서대로 정리되어 있었습니다.
문제 2 - 언급한 대로 각 파일의 첫 번째 줄은 제목입니다. 이러한 파일이 병합되면 이전 장의 마지막 줄이 다음 장의 장 제목과 같은 줄에 배치됩니다.
위의 문제를 어떻게 해결합니까?
답변1
@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
.\rename
숫자뿐만 아니라 영숫자 순서를 충족하는 순서로 파일을 만들 수 있습니다 .
1.파일이 있는 폴더의 전체 경로로 바꾸세요.
cd /d "%~dp0" cd /d "D:\Full\Path\To\Folder
2.루프를 사용하여 1에서 300(1/1씩 1씩 증가)까지의 순서를 구합니다.
for /l %%L in (1 1 300)do ...
삼.1개 이상의 리드 0을 제공하기 위한 2개의 추가 숫자가 있는 사전 정의된 변수로, 이름을 바꿀 때 사용하기 위해 루프 내에서 마지막 4자리만 증가합니다.
set "_c=10000"
set /a "_c+=1" && call set "_new=Chapter !_c:~-4!.txt"
4.추가 루프는 루프에 따라 1부터 300까지의 순서 for /F
로 각 파일을 올바른 순서로 나열합니다 .for /L
for /f tokens^=1* %%i in ('%__AppDir__%where.exe .:Chapter?%%~L.txt')do
5.루프에서 변수가 증가하면 하위 문자열을 사용하여 파일 이름을 0으로 바꿉니다.
:: 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.이중 루프 실행이 완료되면 use를 실행하여 echo
각 파일 끝에 추가 줄을 추가합니다.
for /f tokens^=* %%i in ('%__AppDir__%where.exe .:Chapter*.txt')do echo;>>"%%~dpnxi"
7.위의 모든 처리가 끝나면 명령을 실행하고 원하는 결과를 얻을 수 있습니다.
copy ".\Chapter*.txt" ".\newfile.txt"
- 관찰:귀하의 파일이 어떤 인코딩인지는 모르지만
/b
inary 복사본이 마지막 줄을 덮어쓰지 않는다고 가정합니다.
@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
추가 자료:
답변2
txt 파일이 있는 폴더에 배치를 복사하고 다음을 실행합니다.
@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%"