我的要求是检查特定路径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
请帮助我找出错误是什么以及上述脚本需要进行哪些修改。
答案 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 。因此,变量y
,m
和d
具有尾随空格,并且正在执行的有效语句是
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