2012-05-08 42 views
0

我正在嘗試執行以下操作, Verify.exe會抓取目錄結構並逐個檢查文件是否有任何缺陷。文件被傳遞給verify.exe作爲命令行參數。如果在文件中發現任何缺陷,它將打印一個錯誤代碼(一行字符串)。如果文件合法,則不會打印任何內容我想爲每個錯誤代碼創建一個文件夾,並將錯誤的文件複製到該文件夾​​,以便我可以查看它。如果文件沒有錯誤,則不做任何事情。如何根據程序的輸出製作目錄並將文件複製到它們中

需要檢查的文件位於D:\ Test \ docs \ r1 - 出於測試目的,我在D:\ Test \ docs \ r1中只有一個文件。

::@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> 

有人能幫助我在以下問題..

  • 的循環已經跑三圈
  • 沒有文件夾
  • 似乎有在指定的exe命令行輸出的問題到MyVar

謝謝您提前

回答

1

假設你verify.exe命令的輸出是正確的,你應該啓用延遲擴展(在您的批處理文件的頂部):

SETLOCAL ENABLEDELAYEDEXPANSION 

,並使用!語法循環中使用的變量(取代%MYVAR%!MYVAR!

否則,在for循環中,%MYVAR%僅在第一次運行(未定義值)之前進行計算。

相關問題