如何使用cmd按特定顺序合并文本文件



我正在使用以下命令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

最新更新