0

子フォルダ「1」、「2」、「3」を持つルートフォルダ「Basic」があります。「1」には、サブフォルダ「11」、「12」、および「text.txt」があります。同様に、「2」にはサブフォルダ「22」、「21」、「text.txt」があります。「3」には「31」と「32」があります。

「text.txt」が各フォルダに存在するかどうかを確認するためのバッチファイルプログラムが必要です。特定のルートフォルダ「Basic」に存在しない場合は、子フォルダの名前をmissingfile.txtに書き込みます。

これが私のアカウントです-動作しません。

set value = ""
set exact = ""
cd "C:\Users\bthirumurthy\Desktop\Basic"
dir  "C:\Users\bthirumurthy\Desktop\Basic" /b >> text.txt
for %%a in (text.txt) do (
  if (%%a|="text.txt") (
    dir  C:\Users\bthirumurthy\Desktop\Basic\%%a /b >> C:\Users\bthirumurthy\Desktop\Basic\%%a\result.txt
    for %%b in (result.txt) do (
      if(%%b == "text.txt") (
        set exact = %%b
        set status = 1
      )
      else (
        set missingfile =%%b
        set status = 0
      )
    )
    if (%status% == 1) (
      echo %exact% pass >> pass.txt
    )
    else (
      echo %exact% fail >> Missingfile.txt
    )
    set status = ""
  )
)>>output.txt

手伝ってくれませんか。

4

1 に答える 1

2

あなたのスクリプトがどこで間違っているのかを理解するのに時間をかけていません。しかし、必要なのはコマンド ラインからの単純なワンライナーだけです。バッチは不要:

>missingFile.txt (for /r "C:\Users\bthirumurthy\Desktop\Basic" %F in (.) do @if not exist "%F\test.txt" echo %~fF)

バッチ スクリプト内から実行する場合は、すべてのパーセントを 2 倍にします。(%になります%%)

for /d /r基本的に、このワンライナーは、指定されたルート ディレクトリ (ループ)から始まるディレクトリ ツリーをトラバースします。サブディレクトリごとに、指定されたファイルがそこに存在するかどうかをチェックします (存在しない場合: if not exist ...)。ファイルが存在しない場合、対応するサブディレクトリのフル パスが にログインされmissingfile.txtます。実際には、パスは単にechoed ( echo %~fF) ですが、ループの出力全体がリダイレクトされているため (>missingFile.txt行の先頭にある )、その結果、echoファイルに書き込みます。

編集 - 少し単純なバリエーション

>missingFile.txt (for /r "C:\Users\bthirumurthy\Desktop\Basic" %F in (test.txt) do @if not exist "%F" echo %~dpF)

IN() 句にワイルドカードがない限り、FOR /R ループはファイルが存在するかどうかをチェックしません。ワイルドカードがないと、ディレクトリ ツリーをたどって、各ディレクトリ内のファイル名を使用してパスを作成するだけです。

于 2012-12-25T20:21:55.153 に答える