【问题标题】:batch wildcard (*) in folderpath to target folder name that would vary over time文件夹路径中的批处理通配符 (*) 指向随时间变化的目标文件夹名称
【发布时间】:2018-12-12 22:41:05
【问题描述】:

我想从批处理中定位一个文件夹,该文件夹可能会随着时间的推移而更改其名称。假设我们有Folder 10102018,下次运行批处理时,文件夹名称将是Folder 20102018

我可以从 CMD 导航到 C:\Fold*,这会导致 (C:\Folder 10102018) 使用与The system cannot find the path specified.相同的批处理文件错误

命令是->"..\..\Folder 1.1.10102018\Install.exe"

我尝试实现的是使用其名称“Folder*”的常量位进入该文件夹,并忽略它后面的任何内容,因为它并不真正相关......但很难解决。

一如既往地感谢任何帮助或替代想法!

【问题讨论】:

  • 等一下,我会问我的水晶球...请分享您的相关批处理脚本部分...
  • 对不起 aschhipfl,我不确定 dos 标签,但还是添加了它以吸引更多人。没有太多可分享的 "..\..\Folder 1.1.10102018\Install.exe" 所以我希望它能够工作而不是 "..\..\Folder 1.1.*\Install.exe"
  • 您应该只添加相关标签。无论如何,这段代码不仅仅是分享(请edit你的问题并在那里添加);通配符(*?)只能用在路径的 last 元素中;并且它们不能用于调用应用程序。

标签: windows batch-file cmd


【解决方案1】:

我相信这就是您要寻找的(假设只有一个匹配的文件夹):

for /D %%I in ("..\..\Folder 1.1.*") do "%%~I\Install.exe"

通配符只能用在路径的last元素中,根本不能用于运行应用程序。

打开命令提示符窗口,输入for/? 并阅读帮助文本以了解for [/D] 的作用。

【讨论】:

  • 太好了,按预期工作,非常感谢,我保证再也不会混合dos和batch了!你介意解释一下%%~I 的作用吗?非常感谢
  • for /D 遍历与给定模式匹配的所有文件夹,此处引用该模式是为了避免 空格 出现问题; %%I 是循环元变量,每次循环迭代都会扩展到找到的文件夹,包括(潜在的)双引号; %%~I 扩展为与 %%I 相同,但删除了周围的双引号,因此最终路径 "%%~I\Install.exe" 不是双双引号(因此防止像 ""..\..\Folder 1.1.10102018"\Install.exe" 这样的东西,这会导致麻烦)...
【解决方案2】:

问题是因为文件夹名称中有空格。你能把文件夹名中的空格去掉试试吗?

或使用 _ 或 - 代替空格。

如果文件夹名称中有空格,则应使用“ ”。

【讨论】:

  • 嗨破解,我正在使用“” - 这是命令"..\..\Folder 1.1.10102018\Install.exe" - 我从另一个文件夹调用这个exe,向上两个文件夹,然后输入带有版本和日期的文件夹..那里有东西坏了。所以我希望它可以代替"..\..\Folder 1.1.*\Install.exe"
【解决方案3】:

通配符只能用在路径的最后一个元素中,根本不能用于运行应用程序。 @aschipfl

cd "..\..\Folder 1.1.10102018\*"
Install.exe

单行

cd "..\..\Folder 1.1.10102018\*" && Install.exe

要弹出 2 个目录,只需使用 cd ..\..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2011-02-19
    • 1970-01-01
    • 2014-06-06
    相关资源
    最近更新 更多