【问题标题】:Batch Script Bug - Filename Returns Different then actual Filename批处理脚本错误 - 文件名返回不同于实际文件名
【发布时间】:2016-08-16 06:49:08
【问题描述】:

我的代码

我有一个非常奇怪的错误,我一生都无法弄清楚。以下是示例代码的快速 sn-p:

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

这停止了我的“随机字符串”问题。但是,现在它返回了一个带有昨天日期的文件!

预期结果

文件夹中的文件:

myFilenameRoot_20160422.txt

批量回显显示:

myFilenameRoot_20160422.txt

实际结果

我已在至少 20 个其他项目中使用过此代码,并且运行良好。然而,在这种情况下,我得到的是这样的:

文件夹中的文件:

myFilenameRoot_20160422.txt

批量回显显示:

myFilenameRoot_20160421.txt

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

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

不...上次测试批次,我将文件名更改为:

myFilenameRoot_20160422.txt

myFilenameRoot_20170422.txt

再次运行批处理......但这一次它回显了旧结果:

myFilenameRoot_20160422.txt

冲洗并无数次重复上述故障排除步骤。我无法弄清楚它在哪里/为什么要找到这些替代文件名!有人知道发生了什么吗?

任何帮助将不胜感激!

【问题讨论】:

  • 是您显示的更大脚本的一部分的代码(在另一个 forif 内)?
  • @Stephan - 脚本还有很多内容,但没有 - 上面的代码没有嵌套在其中。
  • 您知道for /R 递归搜索目录吗?如果你不想这样,把它改成FOR %%F IN ("%myFolder%\%myRootFilename%") DO

标签: batch-file for-loop filenames


【解决方案1】:

感谢@aschipfl 在 cmets 中的回答。我只需要调整 FOR 循环...

原始破码:

FOR /R "%myFolder%" %%F IN (%myRootFilename%) DO ()

新的功能代码:

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

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2016-08-02
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多