如何批量为TXT内容追加文件名,根据原始输入文件名命名输出文件,循环遍历200,000个输入文件

How to Batch Append Filename to TXT Contents, Name Output File Based on Original Input Filename, and Loop Through 200,000 Input Files

我正在从事一个人力资源数据项目,经过大量研究和更多的反复试验后,我调整了以下批处理文件(Windows 8.1 环境)成功地从混乱中提取了员工的开始日期文本文件 - 非常感谢用户 dbenham 之前的解决方案(我再次调整如下):

@echo off
setlocal disableDelayedExpansion
set "cnt=1"
>OUTPUT.txt (
  for /f "skip=219 tokens=24,25,26 delims= " %%B in (MVANHOUTEN.txt) do (
    echo(%%B %%C %%D
    set /a "1/(cnt-=1)" 2>nul || goto :break
  )
)
:break

在哪里 MVANHOUTEN.txt 是输入文件

OUTPUT.txt 文件仅包含: 1991 年 1 月 21 日

我对批处理文件编程的复杂性了解有限,尽管我已经确认 dbenham 代码的天才之处在于我的上述更改可以 100% 工作,但我不知道如何在不破坏它的情况下改变它。我需要这个批处理文件再做三件事,但我似乎无法在不破坏上述代码功能的情况下让它工作。具体来说,我需要:

  1. 我需要在数据提取后将原始文本文件名添加到输出文件的内容中。也就是说,我需要我的输出文件包含: MVANHOUTEN 1991 年 1 月 21 日
  2. 而不是 OUTPUT.txt,我需要使用与输入文件相同的文件名来命名我的输出文件,即 MVANHOUTEN.txt。如果这不可能或太笨重,添加到原始文件名将是一个不错的选择——例如MVANHOUTEN-Processed.txt)
  3. 我需要一个 do 循环,因为我有一个包含近 200,000 名现任和前任员工的目录,我需要对每个文件批量执行上述操作 - 因此逻辑上可以代替“(MVANHOUTEN.TXT) " 在上面,我需要找到一种方法来遍历同一目录中的许多 *.txt 文件。结果将是单独的文件 MVANHOUTEN.txt、CMONTYBURNS.txt、DISCOSTU.txt 等(或 MVANHOUTEN-Processed.txt、CMONTYBURNS-Processed.txt、DISCOSTU-Processed.txt, 等等).

任何人都可以帮助我增强上面的批处理文件以在不破坏我成功改编自 dbenham 的原始擦洗的情况下完成上述任务吗?非常感谢!

未经测试,因为我没有您的数据文件:

@echo off
setlocal disableDelayedExpansion

for /f "delims=" %%a in ('dir /b *.txt') do (
  call :process %%a
)

:process
set "cnt=1"
>"%~n1-Processed.txt" (
  for /f "skip=219 tokens=24,25,26 delims= " %%B in (%~nx1) do (
    echo( %~n1 %%B %%C %%D
    set /a "1/(cnt-=1)" 2>nul || goto :eof
  )
)