Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Копирование в папку где знаем только часть имени (http://forum.oszone.net/showthread.php?t=330726)

Jeri20 23-10-2017 14:03 2772711

Копирование в папку где знаем только часть имени
 
Господа, подскажите, а то немного запутался.
Есть задача копировать файлы, папки, и подпапки с содержимым (грубо все содержимое одной папки), из конкретного места, допустим d:\update в папку на диске d:\ где мы знаем только часть имени. Примерно в d:\*_run

Вот такой вариант копирует только файлы.

for /f %%i in ('dir /b /s D:\*_run') do xcopy D:\update\* %%i

Однако мне нужно полное копирование всего.
Подскажите нубу, что не так?

Jeri20 23-10-2017 14:07 2772715

Правка
выглядит это вот так
for /f %%i in ('dir /b /s D:\*_run') do copy D:\update\* %%i

megaloman 23-10-2017 14:49 2772724

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 /?)

Jeri20 23-10-2017 14:56 2772726

Я читаю команды к xcopy
В приведенном вами варианте целевая папка имеет постоянное известное имя.
В моем случае папка куда надо копировать, имеет только часть известного имени.
Предложенный вами вариант в моем случае вываливается ничего не делая и не показывая ошибку даже через pause

Jeri20 23-10-2017 15:13 2772733

Цитата:

Цитата megaloman
Jeri20, В приведенном мной варианте целевая папка имеет только часть известного имени. У меня Z:\*_Out, Вам надо было написать:
Код:
Set "BoxIn=d:\update"
Set "BoxOut=d:\*_run"
Выходная папка будет искаться, в этом случае, в корне диска d:
В постановке Вашей задачи не указывалось, что не известно не только имя папки, но и её местоположение.
Мой вариант не вываливается, просто не находит указанной папки в соответствии с маской, в указанном Вами месте »

Я наверное путано объяснил
Есть папка e:\update Копирование файлов, папок и подпапок с содержимым происходит именно из этого источника
Есть папка e:\тутмынезнаемчастьмимен_688 - в эту папку надо все копировать.

В вашем примере все наоборот.
Как я понимаю у вас BoxIn - куда, BoxOut - откуда. Стоит поменять их местами и все крашится.

Jeri20 23-10-2017 15:22 2772736

Цитата:

Цитата megaloman
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 2772738

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 23-10-2017 15:40 2772740

Цитата:

Цитата megaloman
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 2772747

Jeri20,
Вот отладочный батник, допустим, называется kuku.bat
Код:

@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 , вложите файл в своё сообщение.

Jeri20 23-10-2017 15:52 2772748

Цитата:

Цитата megaloman
Оба варианта рабочие, если правильно применяются »

Спасибо, чудесным образом заработало на другом диске.
Мистика какая-то


Время: 05:20.

Время: 05:20.
© OSzone.net 2001-