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

时间:2018-12-13 12:24:17

标签: batch-file wildcard

首先,关于Stack OverFlow的问题有相似,例如:

但是,我的用例有点特定(或者说:我无法使用从先前论坛条目中获得的经验教训来解决我的问题-请记住,我是使用Batch文件的纯粹初学者)。 / p>

我想做的是从某个路径中获取文件,该路径包括几个子文件夹(这些子文件夹会更改其名称),然后将其复制到具有相似文件夹结构的另一个路径中。

我目前处于困境,我不知道如何在源路径中设置多个通配符,因为它包含一些更改。示例:

源文件:

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%

我非常确定我的代码的第2行包含错误-因为我不知道是否可以设置多个通配符。

控制台为我提供了第2行:

Echo is on

我不明白这意味着什么,我应该怎么做。

1 个答案:

答案 0 :(得分:1)

正如我在comment中已经提到的那样,通配符只能在路径的最后一个元素中使用(取决于这是文件还是目录)。这就是为什么包含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"以查看所有目录。