运行一个服务器中存在的批处理文件以检查另一个服务器中是否存在文件

时间:2013-03-25 06:26:53

标签: file batch-file

我的要求是检查特定路径file_%y%-%m%-%d%-05-00.txt中是否存在文件\\servername\e$\folder\

批处理文件将放在一台服务器A中,我必须检查服务器A和服务器B中file_%y%-%m%-%d%-05-00.txt中是否存在\\servername\e$\folder\

我试图在变量中给出路径,但它不起作用。我试图直接给出路径,但这也不起作用。  我的日志文件包含条目

Server: servername               
File file_2013-03-25-05-00.SEC HAS been found 
File file_2013-03-25-05-00.SEC HAS NOT been found

我的脚本如下:

set d=%date:~7,2%
set m=%date:~4,2%
set y=%date:~10,4%

ECHO Server: servername >> log.txt

ECHO .....................................

IF EXIST \\servername\e$\folder\file_%y%-%m%-%d%-05-00.txt (
GOTO file_found
) ELSE (
GOTO file_not_found)

:file_found
ECHO File file_%y%-%m%-%d%-05-00.txt HAS been found >> log.txt


:file_not_found
ECHO File file_%y%-%m%-%d%-05-00.txt >> log.txt

请帮助我找出错误是什么以及上述脚本需要进行哪些修改。

1 个答案:

答案 0 :(得分:1)

与Delphi等语言不同,批处理只是逐行执行语句,忽略:file_found:file_not_found等标记。标签使用的唯一时间是GOTO,其中执行跳转到指定的目标标签(如GOTO file_not_found中所示。

因此,当您执行GOTO file_found时,它会执行ECHO file...found,然后继续执行:file_not_found标签之后的下一个语句。

要更正,请插入

goto :eof

ECHO...has been found

之后的行上

请注意,特殊标签:eof(不区分大小写)是批量预定义的,意思是“批处理文件的结束” - 并且要使用此预定义,您必须使用:EOF - 使用冒号,而不是eof


发现它!!

由于问题显而易见 - 流式传输,生成BOTH消息,我没有打扰复制粘贴已发布的代码,因为 已被编辑为消息与代码文本不同。

流量问题已得到修复,但随后又出现 ADDITIONAL 问题 - 尽管实际上并未存在,但检测到文件...

我将评论中的 ACTUAL 代码修补到原始问题中(即使现在仍在等待审核......)。

是的 - 非常正确 - 文件 WAS 被检测到,尽管缺席... [插入戏剧音乐]

这就是为什么要发布正确所使用的代码(最小审查嘟m)?

开头的SET行似乎有 TRAILING SPACES 。因此,变量ymd具有尾随空格,并且正在执行的有效语句是

IF EXIST \\.....file_2013 03 25 -05-00.SEC (GOTO ...

现在我不知道为什么解析器没有提出这个问题,但我会把它放在一边。

治愈:(我必须根据我的日期格式和网络资源进行更改,因此我不会发布我的代码)

@echo off 
set "d=%date:~0,2%"
set "m=%date:~3,2%"
set "y=%date:~6,4%"

这应该有效,因为这些行上的任何尾随空格都将被忽略。

NOTEPAD 以引发此类问题而闻名。我使用EDITPLUS