问:Windows批处理:脚本正在执行IF EXIST条件的两个命令

时间:2015-12-17 18:01:28

标签: batch-file if-statement command-line windows-server-2008-r2

我正在制作几个批处理脚本,在脚本中执行这两个命令之前应该检查远程PC是否在线,如果它没有通过任何检查以使“_failed”添加到日志文件中的空白文件名称,它反过来通过服务器上的文件屏幕规则触发失败的备份通知电子邮件。

我从几个来源汇总的脚本如下(到目前为止实际上工作得很好):

IF EXIST "\\192.168.121.2\c$" (
robocopy "\\192.168.121.2\c$\MLINCK" "D:\Store\ProgressULJ" *.* /mir /copyall /zb /np /xf lbia*.* rcda*.* srta*.* dbi*.* *.lk /r:2 /log+:"C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.txt") else (type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt
)
IF EXIST "\\192.168.121.2\c$" (
7za a -tzip "D:\Daily\ProgressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%.zip" "D:\Store\ProgressULJ\*" -mx=5) else (type NUL > C:\Logs\Sync-progressULJ_%DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%_failed.txt
)

我一直遇到的问题是脚本创建了失败的日志,尽管脚本通常在主机联机时执行它的操作。当有问题的主机离线时,脚本只是转储空的日志文件,就像它应该的那样。当主机在线时,脚本会执行其操作并仍然生成失败日志,这会通过电子邮件触发错误警报,但我看不出我做错了什么。

我尝试了脚本的if ping版本(这在这里非常常见),但它的效果不如if exist循环版本,因为如果远程PC就会立即启动已启用,但如果在跳过命令之前无法立即连接它,它仍会进行一些检查。

1 个答案:

答案 0 :(得分:0)

这段代码对我来说很好。你确定没有其他事情发生吗?您可以尝试简化它直到它工作,看看是什么打破了它?我从未使用type来生成文件,而当我刚才这样做时,它给了我奇怪的问题。有没有理由像你一样使用它?

@Echo Off
IF EXIST "\\localhost\downloads" (
    ECHO It Exists 
    ) else (    
    ECHO It does not exist, writing error
    echo test1 >> C:\temp\Sync-failed.txt
)

IF EXIST "\\localhost\fakeshare" (
    ECHO It Exists 
    ) else (    
    ECHO It does not exist, writing error
    echo test2 >> C:\temp\Sync-failed.txt
)

IF EXIST "\\fakehost\fakeshare" (
    ECHO It Exists 
    ) else (    
    ECHO It does not exist, writing error
    echo test3 >> C:\temp\Sync-failed.txt
)

输出:

enter image description here

Sync-failed.txt的内容:

enter image description here