2017-10-18 39 views
2

我已经不工作这个小脚本:赢批次 - 如果文件名的搜索中存在%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 

什么问题,他回覆?

+4

好吧,根据你的输出结果,'if exists'和AND'else'代码都会被执行。这是不可能的,你显示的代码。重新检查你的代码。 – Stephan

+0

您的代码按我的预期运行,并按照我的预期生成结果 - 与您的报告截然不同。我对你的陈述很感兴趣:“没有*20171018Ü* .txt的文件来源:” - 'Ü'让我怀疑你没有将这批保存为ANSI编码,而是保存为unicode。将它保存为ANSI并查看是否修复它。 – Magoo

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

(被视为一个参数传递给假命令,而不是作为一个开始代码块。

当然""\\some不存在,所以伪命令不会执行,并且您不会收到任何错误消息。

现在应该明白为什么所有三个ECHO语句都会执行。

最后一个“神秘”是为什么) else ()语句不会产生任何错误。这是)有效地作为REM的事实的结果,如果没有任何有效的括号码块关闭。 )之后的所有文字都被忽略,就像一句话。

如预期,如果你微妙地改变你的源的定义Squashman建议您的代码应工作:

set "source=\\some path\APPL\Logs" 

现在你的价值变得\\some path\APPL\Logs,不带引号,和一切正常:-)

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语句以及 感谢所有报价: )

相关问题