【问题标题】:Wildcard use updating 7zip Sfx with similar titles通配符使用更新具有相似标题的 7zip Sfx
【发布时间】:2016-09-17 13:14:30
【问题描述】:

我有 4 个不同的 Sfx 7Zip 文件,我需要根据具体情况下载和更新其中一个文件。

zip 的文件名根据内容和功能略有不同,但标题中都有 AUTO 字样。

我用这个命令更新每个文件没有问题,但是我希望简化更新代码。每个安装程序都有一行来更新某个文件但我只想要一行来更新下载的文件的任何版本。

"%~dp0Config\7za.exe" u "%~dp0Installer1Auto.exe" "%~dp0Config\config.cfg"
"%~dp0Config\7za.exe" u "%~dp0Installer2Auto.exe" "%~dp0Config\config.cfg"
"%~dp0Config\7za.exe" u "%~dp0Installer3Auto.exe" "%~dp0Config\config.cfg"
"%~dp0Config\7za.exe" u "%~dp0Installer4Auto.exe" "%~dp0Config\config.cfg"

无论我下载什么版本的 sfx,我如何使用通配符(或类似的)只有一行代码。

我在想像下面这样的事情(但不起作用)......

"%~dp0Config\7za.exe" u "%~dp0*Auto*.exe" "%~dp0Config\config.cfg"

“或”

"%~dp0Config\7za.exe" u "%~dp0*Installer.exe" "%~dp0Config\config.cfg"

任何提示都会非常好,在此先感谢。

【问题讨论】:

    标签: batch-file wildcard 7zip


    【解决方案1】:
    for /L %%q in (1,1,4) do "%~dp0Config\7za.exe" u "%~dp0Installer%%qAuto.exe" "%~dp0Config\config.cfg"
    

    for %%q in (1 2 3 4) do "%~dp0Config\7za.exe" u "%~dp0Installer%%qAuto.exe" "%~dp0Config\config.cfg"
    

    第一个开始将 %%q 设置为 1,然后将 %%q 增加 1 直到达到 4。

    第二个将 %%q 依次设置为值 1..4。

    第二种方法的优点是,如果你想处理名称变体为Wibble, wobble, wubble, and flob的文件,那么就像将代码更改为一样简单

    for %%q in (Wibble wobble wubble flob)...
    

    此外,如有必要,可以对命令进行门控,例如:

    for /L %%q in (1,1,4) do if exist "%~dp0Config\7za.exe" "%~dp0Config\7za.exe" u "%~dp0Installer%%qAuto.exe" "%~dp0Config\config.cfg"
    

    如果只有1 存在,这将避免执行234


    要对在目录%~dp0 中找到的所有 *.exe 文件执行,请使用

    FOR %%a IN ("%~dp0\*.exe") DO ECHO("%~dp0Config\7za.exe" u "%%~fa" "%~dp0Config\config.cfg"
    

    如果需要,*.exe 可以是 installer*auto.exe

    【讨论】:

    • 优秀,完美!感谢您提供详细和多选项的答案。
    • 实际上有没有办法对其进行调整,使 exe 的名称无关紧要,所以无论下载什么 *.exe,更新都会在存在的任何文件上运行?谢谢
    • 嗨,为了让所有 exe 代码工作我需要稍微调整一下,也许你想编辑答案(最后的回显和括号,效果很好!! FOR %%a IN (" %~dp0\auto*.exe") DO ("%~dp0Config\7za.exe" u "%%~fa" "%~dp0Config\config.cfg")
    • 呵呵...虽然传统上echo 后面的字符是一个空格,但有一组字符可以接在o 后面并产生几乎相同的结果。其中,( 特别有用,因为echo %something% 其中something 未定义将报告echo is on/offecho(%something% 其中something 未定义将产生一个新行。尽管出现了,这里的( 绝对没有参与传统的命令“嵌套”。对年轻球员来说当然是一个技巧 - 批次的怪癖之一使它成为黑色艺术。
    • 将 ~f 更改为 ~dpn - 命令(全名)中有 ~f 的位置将其更改为 ~dpn(DrivePathName)。你报告%%~fdpn(太多fs),你确实意识到%%~xyzH意味着apply the modifiers x, y`和z%%H不是吗?因此,由于文件名在%%a%%~fa 表示“%%a 的完整文件名”,%%~dpna 表示%%a 的“DrivePathName”(即不带扩展名的完整文件名。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多