赢批次 - 如果文件名的搜索中存在%DATE% - 不工作
问题描述:
我已经不工作这个小脚本:赢批次 - 如果文件名的搜索中存在%DATE% - 不工作
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用他的评论击中头部 - 你的意外行为是你的任务中引号的结果,加上你的源代码路径中的空间。其实,如果你的路径包含任何标记分隔符像=
,,
,;
,或<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"
的(
被视为一个参数传递给假命令,而不是作为一个开始代码块。
当然""\\some
不存在,所以伪命令不会执行,并且您不会收到任何错误消息。
现在应该明白为什么所有三个ECHO语句都会执行。
最后一个“神秘”是为什么) else (
和)
语句不会产生任何错误。这是)
有效地作为REM
的事实的结果,如果没有任何有效的括号码块关闭。 )
之后的所有文字都被忽略,就像一句话。
如预期,如果你微妙地改变你的源的定义Squashman建议您的代码应工作:
set "source=\\some path\APPL\Logs"
现在你的价值变得\\some path\APPL\Logs
,不带引号,和一切正常:-)
答
它终于摸索:
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语句以及 感谢所有报价: )
好吧,根据你的输出结果,'if exists'和AND'else'代码都会被执行。这是不可能的,你显示的代码。重新检查你的代码。 – Stephan
您的代码按我的预期运行,并按照我的预期生成结果 - 与您的报告截然不同。我对你的陈述很感兴趣:“没有*20171018Ü* .txt的文件来源:” - 'Ü'让我怀疑你没有将这批保存为ANSI编码,而是保存为unicode。将它保存为ANSI并查看是否修复它。 – Magoo
忽略“Ü”,这是一个错字,抱歉。 –