Показать полную графическую версию : Копирование в папку где знаем только часть имени
Господа, подскажите, а то немного запутался.
Есть задача копировать файлы, папки, и подпапки с содержимым (грубо все содержимое одной папки), из конкретного места, допустим d:\update в папку на диске d:\ где мы знаем только часть имени. Примерно в d:\*_run
Вот такой вариант копирует только файлы.
for /f %%i in ('dir /b /s D:\*_run') do xcopy D:\update\* %%i
Однако мне нужно полное копирование всего.
Подскажите нубу, что не так?
Правка
выглядит это вот так
for /f %%i in ('dir /b /s D:\*_run') do copy D:\update\* %%i
megaloman
23-10-2017, 14:49
Jeri20, Читайте хелп команды xcopy /?. Там описаны ключи /S и /E. Мой вариант Вашей задачи:@Echo Off
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\*_Out"
Call :CopyDir "%BoxIn%" "%BoxOut%"
GoTo :Eof
:CopyDir
FOR /F "usebackq delims=" %%d IN (`Dir "%~2" /B /A:D /O:-D /T:A 2^>nul`) DO (
Xcopy "%~1" "%~dp2%%~nxd\" /E /Y
GoTo :Eof
)
GoTo :Eof Естественно, укажите свои пути вместо моих. Если под указанную маску попадут несколько выходных папок, выберется самая последняя по использованию (читаем хелп - ключи команды dir /?)
Я читаю команды к xcopy
В приведенном вами варианте целевая папка имеет постоянное известное имя.
В моем случае папка куда надо копировать, имеет только часть известного имени.
Предложенный вами вариант в моем случае вываливается ничего не делая и не показывая ошибку даже через pause
Jeri20, В приведенном мной варианте целевая папка имеет только часть известного имени. У меня Z:\*_Out, Вам надо было написать:
Код:
Set "BoxIn=d:\update"
Set "BoxOut=d:\*_run"
Выходная папка будет искаться, в этом случае, в корне диска d:
В постановке Вашей задачи не указывалось, что не известно не только имя папки, но и её местоположение.
Мой вариант не вываливается, просто не находит указанной папки в соответствии с маской, в указанном Вами месте »
Я наверное путано объяснил
Есть папка e:\update Копирование файлов, папок и подпапок с содержимым происходит именно из этого источника
Есть папка e:\тутмынезнаемчастьмимен_688 - в эту папку надо все копировать.
В вашем примере все наоборот.
Как я понимаю у вас BoxIn - куда, BoxOut - откуда. Стоит поменять их местами и все крашится.
Jeri20, Ничего не понимаю! Out - это всегда куда. У Вас получилось, что Вы хотели? »
@Echo Off
Set "BoxIn=E:\update" --- откуда
Set "BoxOut=E:\*_s" - куда
Call :CopyDir "%BoxIn%" "%BoxOut%"
GoTo :Eof
:CopyDir
FOR /F "usebackq delims=" %%d IN (`Dir "%~2" /B /A:D /O:-D /T:A 2^>nul`) DO (
Xcopy "%~1" "%~dp2%%~nxd\" /E /Y
GoTo :Eof
)
GoTo :Eof
pause
И ничего не происходит. От слова совсем.
megaloman
23-10-2017, 15:32
Jeri20, У Вас папка траляля_s в корне E:\ ? Или где-то в подпапке диска E:\ ? Выполните команду:
dir "E:\*_s" /A:D >E:\aaaa
и покажите, что в файле E:\aaaa
Jeri20, Если папка с частично известным именем где-то в подпапке указанного диска, то вот вариант:@Echo Off
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\*_Out"
FOR /F "usebackq delims=" %%d IN (`Dir "%BoxOut%" /B /S /A:D /O:-D /T:A 2^>nul`) DO (
Xcopy "%BoxIn%" "%%d\" /E /Y
GoTo :Continue
)
:Continue
Оба варианта рабочие, если правильно применяются
Jeri20, У Вас папка траляля_s в корне E:\ ? Или где-то в подпапке диска E:\ ? Выполните команду:
dir "E:\*_s" /A:D >E:\aaaa
и покажите, что в файле E:\aaaa »
папака таряляля_s в корне
Мне нужно копировать содержимое папки e:\update
Лог по запросу пишет
Содержимое папки E:\
23.10.17 13:06 <DIR> zzz_s
0 файлов 0 байт
1 папок 72*904*704 байт свободно
megaloman
23-10-2017, 15:52
Jeri20, @Echo Off
Set "BoxIn=E:\update"
Set "BoxOut=E:\*_s"
Call :CopyDir "%BoxIn%" "%BoxOut%"
GoTo :Eof
:CopyDir
echo %1
Dir %1
echo %2
Dir %2 /A:D
echo On
FOR /F "usebackq delims=" %%d IN (`Dir "%~2" /B /A:D /O:-D /T:A`) DO (
echo Xcopy "%~1" "%~dp2%%~nxd\" /E /Y
Xcopy "%~1" "%~dp2%%~nxd\" /E /Y
GoTo :Eof
)
GoTo :Eof Выполните его как kuku.bat 2>&1 >E:\aaaa.txt , вложите файл в своё сообщение.
Оба варианта рабочие, если правильно применяются »
Спасибо, чудесным образом заработало на другом диске.
Мистика какая-то
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.