0
  • “主”文件夹
    • 文件夹-“其他”
      • 文件夹-"A"
        文件夹-"B"
        (...)
        文件夹-"N"

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

我想阅读每个文件夹(仅文件夹 A 到 N),收集每个 txt 中的信息并将这些信息合并为一个 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 ... 
4

1 回答 1

1

这里有几个问题:

  • 首先,您缺少对要扫描 .txt 文件的目录的迭代。
  • 然后,您尝试在内部循环中逐行读取文件FOR,但这并不能正常工作 - 而且也没有必要,因为您可以使用TYPE将每个 .txt 文件的内容写入/附加到另一个文件。
  • 最后,您不需要SetLocal EnableDelayedExpansion执行此任务 -如果任何 .txt 文件的文件名中有感叹号,它甚至会导致问题!- 感叹号将被延迟扩展吃掉,因为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 ... 
于 2012-07-31T22:58:15.600 回答