2010-01-29 138 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%来获取环境变量。