0

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

批处理文件将放置在一台服务器 A 中,我必须检查服务器 A 和服务器 B 中是否存在file_%y%-%m%-%d%-05-00.txtin \\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

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

4

1 回答 1

1

与 Delphi 等语言不同,批处理只是逐行执行语句,而忽略:file_foundor之类的标签:file_not_found。唯一使用标签的时间是在 aGOTO中,执行跳转到指定的目标标签(如GOTO file_not_found.

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

要更正,请插入

goto :eof

上线后ECHO...has been found

请注意,特殊标签:eof(不区分大小写)在批处理中被预定义为“批处理文件的结尾” - 要使用此预定义,您必须使用:EOF- 和冒号,而不是eof.


找到了!!

由于问题看起来很明显 - 流过,生成了两条消息,我没有费心复制粘贴发布的代码,因为由于消息与代码文本不同,因此已对其进行了编辑

流通问题已修复,但随后发现了一个附加问题 - 尽管文件实际上并不存在,但仍检测到该文件......

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

是的 - 非常正确 - 文件检测到,尽管不存在...... [插入戏剧音乐]

这就是为什么要准确发布正在使用的代码(审查最少的喃喃自语)

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

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%"

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

记事本因引起此类问题而闻名。我使用EDITPLUS

于 2013-03-25T06:39:41.900 回答