Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Q:Windows批处理:脚本正在执行IF-EXIST条件的两个命令_Batch File_If Statement_Command Line_Windows Server 2008 R2 - Fatal编程技术网

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

Batch file Q:Windows批处理:脚本正在执行IF-EXIST条件的两个命令,batch-file,if-statement,command-line,windows-server-2008-r2,Batch File,If Statement,Command Line,Windows Server 2008 R2,我正在制作几个批处理脚本,这些脚本应该在执行脚本中的两个命令之前检查远程PC是否联机,如果它在任何检查中失败,则生成一个空白文件,并在日志文件名中添加“_failed”,这反过来会通过服务器上的文件屏幕规则触发失败的备份通知电子邮件 我从多个来源收集的脚本如下(到目前为止,它实际上运行得很好): 我一直面临的问题是,尽管脚本通常在主机联机时执行操作,但脚本仍会创建失败的日志。当所讨论的主机脱机时,脚本只会转储空日志文件,就这样,就像它应该做的那样。当主机在线时,脚本完成了它的工作,仍然会生成失败

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

我从多个来源收集的脚本如下(到目前为止,它实际上运行得很好):

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


我尝试了脚本的
if-ping
版本(这在这里很常见),但是它没有
if-exist
循环版本好,因为如果远程PC打开,这个版本会立即启动,但是在跳过命令之前,它仍然会检查是否无法立即连接到它。

这段代码对我来说很好。你确定没有别的事情发生吗?你能试着简化它,直到它起作用,看看是什么破坏了它吗?我从来没有使用
键入
来生成文件,当我刚才这样做时,它给了我一些奇怪的问题。你这样使用它有什么原因吗

@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的内容:


你的else在if括号内,那应该在if之外。@DennisvanGils我试着通过运行脚本,有些脚本没有中断各种命令,因此语法应该是正确的。我相信DennisvanGils在某种程度上是正确的。您可以通过在新行中使用parantasis来尝试脚本,例如:if exist“so and so”(新行在这里。robocopy“so and so”新行在这里。)else(新行在这里。type>NUL new line在这里。)@svasa肯定会在明天尝试几个不同的迭代,谢谢您的提示。通常,批处理文件不喜欢分解命令,因此我通常会尽量减少行数。我按照人们的建议中断了命令,至少失败的状态执行似乎可以正常工作,下周将看到脚本在工作日中的表现。记事本++也喜欢在批处理脚本中将IF子句分隔成单独的行,因此可能就是这样。今天检查了脚本与其他脚本的运行情况,批处理确实更喜欢分隔行。谁知道呢,谢谢你的帮助!
@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
)