Соответствие шаблону каталога Xcopy - PullRequest
0 голосов
/ 02 марта 2019

Мне нужно скопировать исходный файл в папку назначения, используя файл bat.

Я создал это:

@echo off

set source="D:\Folder1\file.dll"
set destination="D:\Test\TestCopy*\Test\"
xcopy /s /y %source%  %destination%
pause

У меня есть целевой путь TestCopy.2.5.3.6.Эти цифры могут измениться.Так что указание TestCopy* не работает.Указание TestCopy.*.*.*.* также не работает.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Это для ситуации, когда у вас есть несколько подпапок TestCopy*:

::It's better to comment out @echo off when you are testing the batch file
::@echo off
::Moved the open quote's position, so the source variable won't have quotes inside.
set "source=D:\Folder1\file.dll"
for /F "delims=" %%i IN ('dir /ad /b "D:\Test\TestCopy*"') do call :fcopy "%%i"
::Comment or remove pause when it's okay.
pause
goto :eof

:fcopy
if not exist "D:\Test\%1\Test\" goto :eof
xcopy "%source%" "D:\Test\%1\Test\"

Используется подпроцедура :fcopy, передайте ей имя каждой подпапки TestCopy*.
Все :: начальные строки - строки комментариев.Они не выполнены.

Я думаю, что это хорошая привычка заключать в кавычки каждую переменную пути, когда она используется, но не включайте сами кавычки в переменную - поэтому я переместил кавычку в строку set source.

0 голосов
/ 02 марта 2019

Это не тот способ, которым используется xcopy: он не может копировать структуры каталогов / файлы в папки, существующие в некоторых подпапках, например, копировать файл random.ext в C:\folder1\test, C:\folder2\test и т. Д.

Кроме того, нет необходимости использовать xcopy для копирования файлов .Используйте copy вместо

. Для этого используйте:

@echo off

pushd "D:\Test"
set source="D:\Folder1\file.dll"

for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do (
    copy %source% "%%~fA\Test\"
)
popd

Или, что лучше, одну строку for /F:

@echo off

pushd "D:\Test"
set source="D:\Folder1\file.dll"

for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do copy %source% "%%~fA\Test\"
popd
...