Использовать несколько подстановочных знаков в пути в пакетном файле - PullRequest
0 голосов
/ 13 декабря 2018

Прежде всего, на 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

Я не понимаю, что это значит и что мне делать.

1 Ответ

0 голосов
/ 14 декабря 2018

Как я уже упоминал в комментарии , подстановочные знаки могут использоваться только в самом последнем элементе пути (независимо от того, является ли это файл или каталог).Вот почему ваша командная строка, содержащая 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", чтобы просмотреть их все.

...