0

次のことをしようとしています.Verify.exeはディレクトリ構造をクロールし、ファイルを1つずつチェックして欠陥を探します. ファイルは、コマンド ライン引数として verify.exe に渡されます。ファイルに欠陥が見つかった場合は、エラー コード (1 行の文字列) が出力されます。ファイルが正当である場合、何も出力されません。エラーコードごとにフォルダーを作成し、そのフォルダーに問題のあるファイルをコピーして確認したいと考えています。ファイルにエラーがない場合、何も行われません。

チェックする必要があるファイルは D:\Test\docs\r1 にあります - テスト目的で、D:\Test\docs\r1 に 1 つのファイルしかありません。

::@echo off
CD D:\Test\doc\r1\
FOR /R %%a IN (*) DO (
 ECHO %%a
 FOR /F %%b IN ('D:\Test\doc\Verify.exe /i:"%%a"') do SET MyVAR=%%b
 IF NOT "%MyVAR%" == "" (
  ECHO "IF one"
  IF EXIST D:\Test\doc\%MyVAR% (
  ECHO "IF two"
  MD D:\Test\doc\%MyVAR%
  )
  COPY %%a D:\Test\doc\%MyVAR%
 )
 SET MyVAR=
 ECHO "------------------------"
)

コマンドラインで次のエコーが表示されます。

D:\Test\doc>CD D:\Test\doc\r1\

D:\Test\doc\r1>FOR /R %a IN (*) DO (
ECHO %a
 FOR /F %b IN ('D:\Test\doc\Verify.exe /i:"%a"') do SET MyVAR=%b
 IF NOT "" == "" (
ECHO "IF one"
 IF EXIST D:\Test\doc\ (
ECHO "IF two"
 MD D:\Test\doc\
)
 COPY %a D:\Test\doc\
)
 SET MyVAR=
 ECHO "------------------------"
)

D:\Test\doc\r1>(
ECHO D:\Test\doc\r1\A5 Incident Management.doc
 FOR /F %b IN ('D:\Test\doc\Verify.exe /i:"D:\Test\doc\r1\A5 Incident Management.doc"') do SET MyVAR=%b
 IF NOT "" == "" (
ECHO "IF one"
 IF EXIST D:\Test\doc\ (
ECHO "IF two"
 MD D:\Test\doc\
)
 COPY D:\Test\doc\r1\A5 Incident Management.doc D:\Test\doc\
)
 SET MyVAR=
 ECHO "------------------------"
)
D:\Test\doc\r1\A5 Incident Management.doc

D:\Test\doc\r1>SET MyVAR=0x8004170b
"------------------------"
D:\Test\doc\r1>

誰かが次の問題で私を助けてくれますか..

  • ループは 3 回実行されました
  • フォルダは作成されません
  • MyVar への exe コマンド ライン出力の割り当てに問題があるようです

前もって感謝します

4

1 に答える 1

1

verify.exeコマンドの出力が正しいと仮定すると、(バッチ ファイルの先頭で)遅延展開を有効にする必要があります。

SETLOCAL ENABLEDELAYEDEXPANSION

!ループ内で使用される変数の構文を使用し%MYVAR%ます( に置き換えます!MYVAR!)

それ以外の場合、for ループ内で%MYVAR%は、最初の実行 (値が定義されていない場合) の前にのみ評価されます。

于 2012-05-08T10:35:44.937 に答える