我这个小脚本无效:
set actdate=%date:~6,4%%date:~3,2%%date:~0,2%
set source="\\somewhere\APPL\Logs"
set target="C:\TEMP\nebu_%actdate%.log"
echo %actdate%
if exist "%source%\*%actdate%*.txt" (
echo vorhanden
echo %source%\*%actdate%*.txt
) else (
echo Nicht vorhanden
)
当我运行脚本时,我得到以下输出:
20171018
vorhanden
"\\somewhere\APPL\Logs"\*20171018*.txt
Nicht vorhanden
现在的问题是,源中没有*20171018*.txt
的文件:
NeBuExport.20171017.102600.txt
NeBuExport.20171016.080552.txt
NeBuExport.20171013.093638.txt
这里有什么问题?
答案 0 :(得分:2)
Squashman用他的评论击中了头部 - 你的意外行为是你的作业中引用的结果,再加上源路径中的空格。实际上,如果您的路径包含=
,,
,;
或<space>
假设您的来源分配为set source="\\some path\APPL\Logs"
。来源的值为"\\some path\APPL\Logs"
,包括引号。
然后您的IF语句扩展为:
if exist ""\\some path\APPL\Logs"\*20171018*.txt" (
由于引号加倍,因此未引用空格,因此将单个标记视为两个标记。
IF测试""\\some
是否存在,如果存在,则尝试执行以下伪造命令:
path\APPL\Logs"\*20171018*.txt"
(
被视为bogus命令的参数,而不是代码块的开头。
当然""\\some
不存在,因此不会执行bogus命令,也不会收到任何错误消息。
现在应该明白为什么所有三个ECHO语句都会执行。
最后一个“谜”是) else (
和)
语句不会产生任何错误的原因。这是因为如果没有任何活动的括号代码块要关闭,)
有效地用作REM
这一事实。 )
之后的所有文字都会被忽略,就像评论一样。
如果您按照Squashman的建议巧妙地更改了源代码的定义,那么您的代码应按预期运行:
set "source=\\some path\APPL\Logs"
现在你的价值变为\\some path\APPL\Logs
,没有引号,一切正常: - )
答案 1 :(得分:0)
终于奏效了:
set "actdate=%date:~6,4%%date:~3,2%%date:~0,2%"
set "source=\\somewhere\APPL\Nebu Agent\Logs"
set "target=C:\TEMP\nebu_%actdate%.log"
if exist "%source%\*%actdate%*.txt" (
echo "vorhanden"
) else (
echo "Nicht vorhanden"
)
它也需要if语句中的引号 感谢所有人:)