Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование в папку где знаем только часть имени

Ответить
Настройки темы
CMD/BAT - Копирование в папку где знаем только часть имени

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 14:03, 23-10-2017

 

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:07, 23-10-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2707
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:49, 23-10-2017 | #3


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:56, 23-10-2017 | #4


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 15:13, 23-10-2017 | #5


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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


И ничего не происходит. От слова совсем.

Отправлено: 15:22, 23-10-2017 | #6


Ветеран


Contributor


Сообщения: 2707
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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
Оба варианта рабочие, если правильно применяются

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-10-2017 в 15:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:32, 23-10-2017 | #7


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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 байт свободно

Отправлено: 15:40, 23-10-2017 | #8


Ветеран


Contributor


Сообщения: 2707
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-10-2017 в 16:03.


Отправлено: 15:52, 23-10-2017 | #9


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Оба варианта рабочие, если правильно применяются »
Спасибо, чудесным образом заработало на другом диске.
Мистика какая-то

Отправлено: 15:52, 23-10-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование в папку где знаем только часть имени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Скопировать в папку, зная только часть ее Имени magarjoba Скриптовые языки администрирования Windows 9 15-02-2017 11:12
CMD/BAT - Заархивировать папку через БАт, но только ее содержимое,а не саму папку. iphone1337 Скриптовые языки администрирования Windows 2 02-11-2014 12:28
CMD/BAT - записать в txt файл только часть имени файла. Spacejet Скриптовые языки администрирования Windows 2 20-10-2014 18:18
CMD/BAT - [решено] Копирование файла в папку содержащую в имени определенные буквы I-Cube Скриптовые языки администрирования Windows 3 14-11-2012 18:40
CMD/BAT - [решено] часть имени файла LAKERS824 Скриптовые языки администрирования Windows 3 29-06-2012 08:02




 
Переход