我正在使用以下命令copy *.txt newfile.txt
将我的文本文件合并到主文件中,但顺序被搞砸了。我有文本文件,其名称按顺序排列
- 1月.txt 2
- 月2日.txt
- 2月3日.txt
- 4月.txt
- 5月.txt 6
- 月6日.txt 7
- 月7日.txt 8
- 月8日.txt 9
- 月9日.txt 10
- 月10日.txt 11
- 月11日.txt 12
- 月12日.txt
但是使用 cmd 命令,它首先附加 10 十月、11 月、12 十二月,然后从 1 月 1 日开始追加。
cmd 中是否有任何命令可以执行此操作或任何其他代码也可以。
一种可能的方法是这样的(假设前面的数字是正数并且没有前导零,并且文件名不包含 !
或 ^
(:
cmd /V /Q /C copy nul "newfile.txt" ^& set /A "LIM=0" ^& (for %J in ("*.txt") do set "NUM=%~nJ" ^& set /A "NUM+=0" ^& set "$[!NUM!]=%~J" ^& if !LIM! lss !NUM! set /A "LIM=NUM") ^& (for /L %I in (1,1,!LIM!) do if defined $[%I] copy /B "newfile.txt" + "!$[%I]!" "newfile.txt")
如果您将此代码放在批处理文件中,它可能如下所示(请注意,我在此处还插入了几个rem
标记来解释代码(:
@echo off
rem // Enable delayed expansion to be able to write AND read variables in a single block:
setlocal EnableDelayedExpansion
rem // Create empty target file:
copy nul "newfile.txt"
rem // Reset buffer for greatest preceding integer number:
set /A "LIM=0"
rem // walk through all matching files:
for %%J in ("*.txt") do (
rem // Store base file name to variable, then covert it to integer:
set "NUM=%%~nJ" & set /A "NUM+=0"
rem // Write full file name to array-like variable with gathered integer as index:
set "$[!NUM!]=%%~J"
rem // Update buffer for greatest preceding integer number:
if !LIM! lss !NUM! set /A "LIM=NUM"
)
rem // Count up from one to greatest preceding integer number:
for /L %%I in (1,1,!LIM!) do (
rem // Check whether pseudo-array element is defined and append to target file then:
if defined $[%%I] copy /B "newfile.txt" + "!$[%%I]!" "newfile.txt"
)
rem // End environment localisation:
endlocal