批处理脚本错误 - 文件名返回不同于实际的文件名

时间:2016-04-22 14:59:22

标签: batch-file for-loop filenames

我的代码

我有一个非常奇怪的错误,我不能为我的生活弄清楚。以下是示例代码的快速摘录:

set myFolder=\\myPath\myFolder
set myRootFilename=*myFilenameRoot*.txt

IF NOT EXIST "%myFolder%\%myRootFilename%" GOTO next
FOR /R "%myFolder%" %%F IN (%myRootFilename%) DO (
    set filenameWithExt=%%~nxF
    )
echo %filenameWithExt%
pause

:next
echo doesn't exist
pause

问题1 - "随机字符串"

预期结果

文件夹中的文件:

  

myFilenameRoot_20160422.txt

批量回显显示:

  

myFilenameRoot_20160422.txt

实际结果

我已经在至少20个其他项目中使用过此代码,并且它完美无缺。然而,在这种情况下,我得到这样的东西:

文件夹中的文件:

  

myFilenameRoot_20160422.txt

批量回显显示:

  

randomSTRING_myFilenameRoot_20140926.txt

我不知道" randomSTRING"是生成,也不是新日期的来源?!它几乎就像它在文件夹中找到了另一个文件(任何时候只有一个或两个文件)。但是,当我从文件夹中手动删除 myFilenameRoot_20160422.txt 文件时..." IF NOT EXIST"代码开始。

问题2 - 文件夹刷新?

为了使事情变得更奇怪,我决定简单地从我的字符串的开头删除通配符,即:

set myRootFilename=myFilenameRoot*.txt

这阻止了我的" Random String"问题。但是,现在它返回了一个带有昨天日期的文件!

预期结果

文件夹中的文件:

  

myFilenameRoot_20160422.txt

批量回显显示:

  

myFilenameRoot_20160422.txt

实际结果

我已经在至少20个其他项目中使用过此代码,并且它完美无缺。然而,在这种情况下,我得到这样的东西:

文件夹中的文件:

  

myFilenameRoot_20160422.txt

批量回显显示:

  

myFilenameRoot_20160421.txt

它在哪里找到这个文件名?好问题,因为我不知道。所以我从文件夹中删除了文件,然后再次运行批处理。再一次,"如果不存在"逻辑开始了。

所以我把文件放回文件夹,再次运行批处理 - 这次实际结果与预期结果相符......成功!正确?

不...最后一次测试批次,我改变了我的文件名:

  

myFilenameRoot_20160422.txt

  

myFilenameRoot_20170422.txt

再次抛弃批次......但这一次它反映了旧的结果:

  

myFilenameRoot_20160422.txt

冲洗并重复上述故障排除步骤无数次。我无法弄清楚找到这些替代文件名的位置/原因!有没有人知道发生了什么?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

感谢@aschipfl的评论中的答案。我只需要调整FOR循环......

原始破码:

FOR %%F IN ("%myFolder%\%myRootFilename%") DO ()

新功能代码:

{{1}}