批处理文件合并多个文本文件并保留名称

批处理文件合并多个文本文件并保留名称

我有以下文本文件:

apple1.txt
apple2.txt
apple3.txt

water melon10.txt
water melon11.txt
water melon12.txt

我想将所有苹果合并到一个 txt 文件中 -apple_all.txt并将所有西瓜合并到另一个文件中 -water melon_all.txt

请注意,西瓜中的空格是故意的——有些 txt 文件名中有空格。

所有文件都位于一个文件夹中。合并的顺序无关紧要。

答案1

合并命令

@echo off
>"%~1_all.txt" (
  for %%F in ("%~1*.txt") do if /i "%%F" neq "%~1_all.txt" type "%%F"
)

用法:

merge apple
merge "water melon"

或者,将所有内容放在一个批处理脚本中:

@echo off
call :merge apple
call :merge "water melon"
exit /b

:merge
>"%~1_all.txt" (
  for %%F in ("%~1*.txt") do if /i "%%F" neq "%~1_all.txt" type "%%F"
)
exit /b

通过编程找出文件夹中的所有水果并非易事,因为没有简单的方法批量修剪文件基本名称中的所有尾随数字。以下是解决方案(未经测试):

@echo off
setlocal disableDelayedExpansion
del *_all.txt 2>nul
for /f "delims=" %%F in (
  'dir /b /a-d *.txt^|findstr "[^0-9][0-9]*\.txt$"'
) do call :proc "%%F"
exit /b

:proc
set "file=%~1"
set "fruit=%~n1"
setlocal enableDelayedExpansion
:trimNum
if "!fruit:~-1!" geq "0" if !fruit:~-1!" leq "9" (
  set "fruit=!fruit:~0,-1!"
  goto :trimNum
)
type "!file!" >>"!fruit!_all.txt"
exit /b

相关内容