batch-file - Win Batch - IF EXIST %date% 在文件名搜索中 - 不起作用

标签 batch-file

我有这个小脚本不起作用:

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/

相关文章:

variables - 批处理脚本未设置变量

batch-file - 如何使用批处理脚本读取文件并根据该行中的字符提取该行的子集?

windows - 如何从另一个 Windows 批处理脚本调用一个 Windows 批处理脚本,并在两者中都启用延迟扩展

windows - %~ 在 REM 语句中

string - 在批处理脚本中将变量字符串作为命令运行

mysql - 调用目录中的文件列表并在一行中传递它们

batch-file - 如何将 IP 地址放入批处理文件变量中?

batch-file - CMD:根据文件夹名称的前 8 个字符批量重命名文件夹中文件的脚本

batch-file - 使用批处理文件压缩

batch-file - cmd 批处理 - usebackq 为 : string to split altered from comma separated to space separated