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

标签 batch-file wildcard

首先,Stack OverFlow 上有类似的问题,例如:

但是,我的用例有点具体(或者说:我无法使用从以前的论坛条目中吸取的教训来解决我的问题 - 请注意,我是批处理文件的纯粹初学者)。

我想做的是从某个路径抓取一个文件,其中包括几个子文件夹(更改它们的名称)- 并将其复制到另一个具有类似文件夹结构的路径。

我目前停留在这一点上,我不知道如何在源路径中设置多个通配符,因为它包含一些变化。示例:

源文件:

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

我不明白这是什么意思,我该怎么办。

最佳答案

正如我在 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" 以查看它们全部。

关于batch-file - 在批处理文件的路径中使用多个通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53761805/

相关文章:

java - super 通配符导致的编译错误

shell - rm -rf/base-dir-path/*/work 与/base-dir-path/*/*/work 不同

windows - 用于查找已安装设备的驱动器号的批处理脚本

batch-file - 使用 xcopy 通过 *.extension 复制多个文件

http - 如何通过telnet发送POST请求

javascript - 通配符或星号 (*) 与命名或选择性导入 es6 javascript

windows - 批处理文件范围

arrays - 批处理 (CMD) 迭代两个数组(由 2 个 .txt 文件组成)

sql - SQL LIKE查找-,/,_

javascript - 从字符串模板获取通配符名称