我有这个小脚本不起作用:
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
这里有什么问题吗?
最佳答案
Squashman 的评论一针见血 - 您的意外行为是作业中引用的结果,加上源路径中的空格。实际上,如果您的路径包含任何 token 分隔符,例如=
,则可能会出现问题。 , ,
, ;
,或<space>
假设您的源分配是 set source="\\some path\APPL\Logs"
。源的值为 "\\some path\APPL\Logs"
,包括引号。
然后你的 IF 语句扩展为:
if exist ""\\some path\APPL\Logs"\*20171018*.txt" (
由于双引号,空格没有被引号括起来,所以本来应该是单个标记的内容被视为两个标记。
IF 测试 if ""\\some
存在,如果存在,那么它会尝试执行以下虚假命令:
path\APPL\Logs"\*20171018*.txt"
(
被视为虚假命令的参数,而不是代码块的开头。
当然""\\some
不存在,因此不会执行虚假命令,并且您不会收到任何错误消息。
现在应该很清楚为什么所有三个 ECHO 语句都会执行。
最后一个“谜团”是为什么) else (
和)
语句不会产生任何错误。这是由于 )
有效地充当 REM
如果没有任何事件的括号代码块要关闭。 )
之后的所有文本被忽略,就像评论一样。
如果您按照 Squashman 的建议巧妙地更改源的定义,您的代码应该按预期运行:
set "source=\\some path\APPL\Logs"
现在你的值变成 \\some path\APPL\Logs
,不带引号,一切正常:-)
关于batch-file - Win Batch - IF EXIST %date% 在文件名搜索中 - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810044/