2017-05-12 37 views
0

嗨,我是新来这个网站,并表示道歉,如果这已被回答,但虽然我可以找到我的问题在这个网站上的答案的部分我找不到解决方案到我想要做的事情。检查文件是否存在批量文件中的数组

我需要做的是在批处理脚本中定义一个文件列表,然后循环遍历包含一些数据文件的目录,并确保已传递到该目录的文件与我的列表中的内容匹配。如果他们不这样做,然后建立一个字符串回车界定,然后将形成一个电子邮件警报的文本,将在批处理结束时被调用。我有什么迄今为止是这样的:

echo off 

setlocal EnableDelayedExpansion 

SET ImportDirectory=D:\Data Files\ 

SET MissingFiles= 

@REM Build Array of sorts 

@set arrayline[0]=%ImportDirectory%File1*.xml 

@set arrayline[1]=%ImportDirectory%File2*.xml 

@set arrayline[2]=%ImportDirectory%File3*.xml etc 

@REM Loop through and check whether file exists 
@for /l %%n in (0,1,2) do (

if not exist !arrayline[%%n]! (
    echo File does not exist 
    SET MissingFiles=%MissingFiles%!arrayline[%%n]! 

    REM echo File !arrayline[%%n]! has not been delivered for processing >> %LogFilePath% 
    echo File !arrayline[%%n]! has not been delivered for processing 
) else (
echo File Exists 
) 
) 

@REM Test to see if any files are missing and send email 
IF NOT %MissingFiles% == "" (
@REM Call code that sends the email with Missing Files as the body 
) 

当我尝试运行此运行,但我的错误列表不会被建造。我可以回显!arrayline [%% n]!在循环中每次都变量,但它不写入或附加到Missing File变量。同样,如果我尝试将结果输出到文件中,则不会输出任何内容 - 我只是收到有关回显关闭的各种消息。

任何指导,将不胜感激。

回答

0

您正在使用延迟扩张!arrayline[%%n]!但也不是为%MissingFiles%

@echo off 
setlocal EnableDelayedExpansion 
SET ImportDirectory=D:\Data Files\ 
SET MissingFiles= 
REM Build Array of sorts 
set "arrayline[0]=%ImportDirectory%File1*.xml" 
set "arrayline[1]=%ImportDirectory%File2*.xml" 
set "arrayline[2]=%ImportDirectory%File3*.xml" 

REM Loop through and check whether file exists 
for /l %%n in (0,1,2) do (
    if not exist !arrayline[%%n]! (
     echo File does not exist 
     SET "MissingFiles=!MissingFiles!,!arrayline[%%n]!" 

     REM echo File !arrayline[%%n]! has not been delivered for processing >> %LogFilePath% 
     echo File !arrayline[%%n]! has not been delivered for processing 
    ) else (
     echo File !arrayline[%%n]! Exists 
    ) 
) 

REM Test to see if any files are missing and send email 
IF NOT "%MissingFiles%" == "" (
    Echo Missingfiles: %MissingFiles:~1% 
    REM Call code that sends the email with Missing Files as the body 
)