如何将文件名附加到TXT内容,根据原始输入文件名命名输出文件,并循环通过200,000个输入文件

时间:2017-06-09 18:24:41

标签: windows batch-file for-loop text editing

我正在研究一个人力资源数据项目,经过大量研究甚至更多的试验和错误,我调整了以下批处理文件(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)& #34;在上面,我需要找到一种方法来遍历同一目录中的许多* .txt文件。结果将是单独的文件MVANHOUTEN.txt,CMONTYBURNS.txt,DISCOSTU.txt等等(或MVANHOUTEN-Processed.txt,CMONTYBURNS-Processed.txt,DISCOSTU-Processed.txt等)。
  4. 任何人都可以帮我改进上面的批处理文件以完成上述操作而不破坏我成功改编自dbenham的原始磨砂膏吗?非常感谢提前!

1 个答案:

答案 0 :(得分:0)

untested, as I don't have your datafiles:

@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
  )
)