在批处理文件中使用多个通配符来匹配路径

3
首先,Stack Overflow 上有一些类似的问题,例如: 然而,我的用例有点特殊(或者说:我无法通过之前论坛条目中学到的经验来解决我的问题 - 请注意,我是一个 Batch 文件的纯初学者)。
我想做的是从某个路径中获取一个文件,该路径包括一些子文件夹(其名称会更改) - 并将其复制到具有类似文件夹结构的另一个路径中。
我目前卡在这一点上,我不知道如何在源路径中设置多个通配符,因为它由几个变化的部分组成。例如:

源文件:

C:\20170621_Update2017SR1\Polarion_update\_backup-20170627-1602.05\polarion\plugins\com.polarion.alm.tracker_3.17.0\configuration\MyPolarion\page.xml

目标目录:

C:\Polarion\polarion\plugins\com.polarion.alm.tracker_3.18.2\configuration\My Polarion

基本上只有带数字的部分可以更改,因此我尝试了以下操作:
for /D %%a in ("C:\Polarion\polarion\plugins\com.polarion.alm.tracker*") do set "com.polarion.alm.tracker=%%a"
for /D %%b in ("C:\*_Update*\Polarion_update\_backup-*\polarion\plugins\com.polarion.alm.tracker*") do set "folder=%%b"

echo %com.polarion.alm.tracker% 
echo %folder%

set source="%folder%\configuration\MyPolarion\page.xml"
set destination="%com.polarion.alm.tracker%\configuration\My Polarion"
xcopy /s /Y %source% %destination%

我很确定我的代码第二行有错误 - 因为我不知道是否可以像这样设置多个通配符。
控制台对第二行的输出是:
Echo is on

我不理解这是什么意思以及我应该怎么做。

3
Echo is on 表示您的批处理文件试图执行 echo,但后面没有任何内容。这意味着 %com.polarion.alm.tracker% 是空的。 - Pieter Mantel
非常感谢你,Pieter! - SteffPoint
3
文件夹路径中不能使用通配符。 - Squashman
嗯,第1行和第4行对我来说还可以。 - SteffPoint
4
通配符只能用于路径的最后一个元素(我猜这就是@Squashman实际上所指的); 因此 D:\some_dir\*_name 可以工作,但 D:\some_*\dir_name 则不行。因此,每个带通配符的目录层级都需要单独解析:for /D %J in ("D:\some_*") do for /D %I in ("%~J\*_name") do echo Resolved two directory levels: "%~I"(在批处理文件中将%符号翻倍)。 - aschipfl
1个回答

6

如我在评论中提到的,通配符只能用在路径的最后一级(无论是文件还是目录)。这就是为什么包含C:\*_Update*\Polarion_update\...的命令行会失败。不过,你可以逐个级别地使用通配符来解析每个目录,像这样:

set "folder="
for /D %%b in ("C:\*_Update*") do (
    for /D %%c in ("%%~b\Polarion_update\_backup-*") do (
        for /D %%d in ("%%~c\polarion\plugins\com.polarion.alm.tracker*") do (
            set "folder=%%~d"
        )
    )
)
echo "%folder%"

如果在任何级别上存在多个匹配的目录,则将 set "folder=%%~d" 替换为 echo "%%~d" 以查看所有匹配项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接