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

Q: Windows batch: script is executing both commands of an IF EXIST condition

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

我从多个来源整理的脚本如下(到目前为止实际上运行良好):

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 已打开,但在跳过命令之前它仍会检查是否无法立即连接到它。

这段代码对我来说很好用。你确定没有其他事情发生吗?您能否尝试简化它直到它起作用,然后看看是什么破坏了它?我从未使用 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
)

输出:

以及Sync-failed.txt的内容: