Ste*_*int 3 wildcard batch-file
首先,在 Stack OverFlow 上也有类似的问题,比如:
但是,我的用例有点具体(或者说:我无法使用从以前的论坛条目中学到的经验教训来解决我的问题 - 请注意,我是批处理文件的纯粹初学者)。
我想要做的是从某个路径中获取一个文件,其中包括几个子文件夹(更改其名称) - 并将其复制到另一个具有类似文件夹结构的路径。
我目前被困在这一点上,我不知道如何在源路径中设置多个通配符,因为它包含一些变化。例子:
源中的文件:
C:\20170621_Update2017SR1\Polarion_update\_backup-20170627-1602.05\polarion\plugins\com.polarion.alm.tracker_3.17.0\configuration\MyPolarion\page.xml
Run Code Online (Sandbox Code Playgroud)
目标目录:
C:\Polarion\polarion\plugins\com.polarion.alm.tracker_3.18.2\configuration\My Polarion
Run Code Online (Sandbox Code Playgroud)
基本上只有带数字的部分可以更改,所以我尝试了以下操作:
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%
Run Code Online (Sandbox Code Playgroud)
我很确定我的代码的第 2 行包含错误 - 因为我不知道是否可以像这样设置多个通配符。
控制台给了我第 2 行:
Echo is on
Run Code Online (Sandbox Code Playgroud)
我不明白这意味着什么,我该怎么做。
正如我在评论中已经提到的,通配符只能用在路径的最后一个元素中(与这是文件还是目录无关)。这就是包含命令行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%"
Run Code Online (Sandbox Code Playgroud)
如果任何级别有多个匹配的目录,则替换set "folder=%%~d"
为echo "%%~d"
以查看它们。