2010-01-29 193 views
0

我正在編寫一個DOS批處理作業來查看兩個不同的目錄,識別具有類似前六個字符的文件,然後將兩個匹配的文件移動到第三個目錄。我在下面的代碼中收到語法錯誤。有什麼建議麼?匹配並移動批處理作業

文件1:

set CopyCount=0 


for %%f in (??????*.tif) do call ..\MatchMove1.bat %%f 

cd .. 

if %CopyCount%==0 goto end 

ECHO %date%-%time% %CopyCount% "Matched and Copied" >> MatchMove.log 
ECHO %date%-%time% "**************************************************" >> MatchMove.log 

echo %CopyCount% 

:end 

文件2(MatchMove1)

set xFile=%1 
set pFile=%xFile:~0,6% 

cd.. 

if not exist "Copy3_Certificates_tiff\%Pfile%*.tif" PAUSE goto end 

copy "Copy4_Working_Documents\%pfile%*.tif" "Copy5_Cert_WorkDoc_Match" 
copy "Copy3_Certificates_tiff\%pfile%*.tif" "Copy5_Cert_WorkDoc_Match" 

rename "Copy4_Working_Documents\%xFile%" "%xFile%*.cpy" 
rename "Copy3_Certificates_tiff\%pfile%*.tif" "%pfile%*.tif.cpy" 

ECHO %date%-%time% "Files starting with "%pfile%" copied" >> ..\MatchMove.log 

set /a CopyCount =%CopyCount%+1 

:end 
+0

你能發佈錯誤消息和你調用的命令嗎? – 2010-01-29 15:09:53

+0

你問了一些建議。我建議刪除一個非常可怕的編程語言(DOS批處理),並使用像Perl這樣的明智的模式匹配語言。 – gary 2010-01-29 15:11:57

+0

注意:不要在'set'的等號周圍放置空格。 'set/a CopyCount =%CopyCount%+ 1'行可能不會做你想要的。無論如何,你可以將它縮短到'set CopyCount + = 1'(注意在等號前面有* no *空格,否則該變量的名字中會包含空格) – Joey 2010-01-29 15:14:17

回答

0
I'm getting: '..\MatchMove1.bat' is not recognized as an internal or external command,operable program or batch file 

這表明它無法找到MatchMove1.bat,是在該文件夾的父文件夾從你開始的過程?

+0

我是塗料。不,這不對!謝謝。它仍然是非常不雅的代碼,並沒有按照它的方式運行,但我認爲我可以解決其餘的問題。謝謝。 – 2010-01-29 17:24:38

0

爲了避免這種問題,我會使用CALL :label語法將您的兩個.BAT文件放在一個文件中。請參閱HELP CALL

另外,爲了您的SET命令正常工作,您需要確保您已啓用延遲擴展。有關說明,請參閱HELP SET

插入該行

SETLOCAL ENABLEDELAYEDEXPANSION 

爲您的批處理文件的第一行。

並使用!CopyCount!而不是%CopyCount%來獲取環境變量。