批量搜索文本,提取内容,合并单个文本中的内容

时间:2012-07-27 03:42:28

标签: batch-processing batch-file

  • “Main”文件夹
    • 文件夹 - “其他”
      • 文件夹 - “A”
         文件夹 - “B”
         (...)
         文件夹 - “N”

嗨,我有一个主文件夹,一个辅助文件夹及其几个名为“folder-A,folder-B ... folder-N”的子项。每个孩子都有包含大量信息的txt文件。

我想读取每个文件夹(只有文件夹A到N),收集每个文本中的信息并合并该信息以生成Big.txt。用户还可以知道分析和合并了多少txt文件。

到目前为止没有好结果。有什么帮助吗?

@echo off
set DRV1=c:\Main\Other
set DRV2=c:\Big
cd %DRV1%
        setlocal enabledelayedexpansion
        set /a count=0 
          for %%f in (*.txt) do (
            for /f "delims= " %%a in (%%f) do ( 
            set /a count+=1 
            echo %%a >> %DRV2%\Big.txt
          )
     )
endlocal
echo There were processed %count% txt files ... 

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  • 首先,您错过了要扫描.txt文件的目录的迭代。
  • 然后你试图在内部FOR循环中逐行读取这些文件并且不能正常工作 - 而且也没有必要,因为你可以使用TYPE来将每个.txt文件的内容写入/附加到另一个文件。
  • 最后,如果任何.txt文件的文件名中都带有感叹号SetLocal EnableDelayedExpansion,则此任务不需要! - 它甚至可能导致问题 - 延迟扩展会吃掉感叹号,因为CMD.EXE认为它是变量名的一部分,破坏文件名,从而导致文件内容不包含在Big.txt中。顺便说一句,我不知道在它摆弄我的同时摆弄解决方案 - 因为我实际上有.txt文件在文件名中带有感叹号进行测试:)

长话短说,这就是我最终的结果:

@ECHO OFF
SET DRV1=c:\Main\Other
SET DRV2=c:\Big
SET /a count=0 
:: iterate over all directories in %DRV1%
FOR /f "tokens=*" %%F IN ( 'dir /b /a:d %DRV1%' ) DO ( 
    :: for each directory, iterate over all .txt files
    FOR %%G IN ( %DRV1%\%%F\*.txt ) DO (
        SET /a count+=1 
        TYPE %%G >> %DRV2%\Big.txt
    )
)
ECHO There were processed %count% txt files ...