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 ファイルをスキャンしたいディレクトリの繰り返しがありません。
  • 次に、内側のループでファイルを 1 行ずつ読み込もうとしていますが、そのままでは機能しません。また、各 .txt ファイルの内容を別のファイルに書き込み/追加FORするために使用できるため、必要もありません。TYPE
  • 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 に答える