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

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

Ответить
Настройки темы
CMD/BAT - [решено] Скопировать из множества папок по одному самому новому файлу с переименованием.

Пользователь


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

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


Здравствуйте.

Задача - собрать (скопировать по маске) из множества папок по одному последнему созданному в них файлу в целевую папку. И при копировании присвоить этим файлам имена исходных папок.

Хотелось это сделать через присвоение множества папок одной переменной, поскольку папки могут быть в разных местах и на разную глубину:
Код: Выделить весь код
set "F01=D:\FOLDER1"
set "F02=D:\FOLDER2"
set "F03=D:\FOLDER3"
set FSET="%F01%" "%F02%" "%F03%"
, чтобы использовать потом в конструкции
Код: Выделить весь код
FOR /D %%d IN (%FSET%) DO
Для копирования последних созданных файлов нашел на форуме код уважаемого megaloman
http://forum.oszone.net/thread-224061.html

Но связать все это вместе не смог.
Прошу помочь. Или подскажите альтернативное решение.

Отправлено: 00:47, 12-09-2021

 

Пользователь


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

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


megaloman, большое спасибо. Это как раз то решение, на которое я замахнулся и не осилил.
Не так лаконично, как предложил alpap, но для меня очень ценно, чтобы понимать, как использовать множества папок и масок через общую переменную.
Параметр /s для обхода подпапок исключу, в моем случае он лишний.
По нумерации - вариант, но для визуального контроля удобнее вариант alpap - зная код, можно быстро определить какой файл с повторяющимся именем из какой папки пришел, или не пришел.
С советом предварительно очищать OUT соглашусь и учту.
Очень благодарен.

Еще раз спасибо всем за помощь.

Отправлено: 22:54, 12-09-2021 | #11



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

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


Ветеран


Contributor


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

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


Цитата NuclearBox:
Параметр /s для обхода подпапок исключу, в моем случае он лишний. »
Уберите красный For и больше ничего не изменяйте.

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

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

Отправлено: 23:04, 12-09-2021 | #12


Пользователь


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

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


megaloman, Точно, спасибо.

Отправлено: 23:52, 12-09-2021 | #13


Ветеран


Contributor


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

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


Цитата NuclearBox:
зная код, можно быстро определить какой файл с повторяющимся именем из какой папки пришел, или не пришел »
Не надо знать код, надо задокументировать копирование в .Log-файле.
Код: Выделить весь код
@Echo Off
cls
	Set Folders="Z:\Program Files\Internet Explorer" "Z:\Program Files\7-Zip\Lang" "Z:\Video\Разное\Животные" "Z:\Box_In\Program Files\Internet Explorer" "Z:\Box_In\Program Files\7-Zip\Lang" "Z:\Box_In\Video\Разное\Животные"
	Set Mask="*.bat" "2*.xlsx"
	Set "Out=Z:\Out"
	Set "Log=Z:\Out\__%~nx0.log"

	2>nul Pushd "%Out%" &&(2>nul Rd "%Out%" /S /Q &Popd)||(>nul 2>&1 Md "%Out%")

	For %%d In (%Folders%) Do Call :MyCopy "%%~d" "%%~nxd" "%Mask%" "%Out%"
rem	For /F "usebackq delims=" %%d In (`2^>nul Dir %Folders% /B /S /A:D`) Do Call :MyCopy "%%d" "%%~nxd" "%Mask%" "%Out%"
pause		
Exit /B

:MyCopy
	Pushd %1
	Set "Add="
	If Not Exist "%~4\%~2.*" GoTo :ContMyCopy                                             	
	Set /A i=100
	:Begin
		Set /A i+=1
		Set "Add=_%i:~-2%"
		If Exist "%~4\%~2%Add%.*" GoTo :Begin                                             	
	:ContMyCopy
 	Call :MyReCopy %1 %4 %2 "%Add%" %~3
	Popd
Exit /B 

:MyReCopy
	If "%~5"=="" Exit /B
	For /F "usebackq delims=" %%f In (`2^>nul Dir %5 /B /A:-D /O:-D /T:W`) Do (
		>nul Copy "%%f" "%~2\%~3%~4%%~xf"
		>>"%Log%" Echo "%~2\%~3%~4%%~xf"	^<---- "%~1\%%f"
		GoTo :ContMyReCopy
	)
	:ContMyReCopy
	Shift /5
	GoTo :MyReCopy
Exit /B

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

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

Отправлено: 00:02, 13-09-2021 | #14


Пользователь


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

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


megaloman, Да, логично, не подумал об этом. Круто и даже избыточно.

Отправлено: 00:38, 13-09-2021 | #15


Ветеран


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

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


А теперь задача со звёздочкой: если там а) и впрямь копирование, б) в пределах одного раздела, в) в скопированные файлы не вносится изменений — вместо копирования создаём жёсткие ссылки .

Отправлено: 19:46, 13-09-2021 | #16



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Обращение к самому новому/последнему файлу в папке Sisin Скриптовые языки администрирования Windows 38 28-06-2019 19:55
PowerShell - копирование файлов из множества папок в одну oka08@vk Скриптовые языки администрирования Windows 2 26-03-2019 11:09
CMD/BAT - [решено] bat перемещение из всех вложенных папок в корневую с переименованием strel9 Скриптовые языки администрирования Windows 3 13-11-2018 18:46
PowerShell - [решено] Скрипт по сбору строк из множества файлов в один. Load980 Скриптовые языки администрирования Windows 9 30-01-2017 08:16
CMD/BAT - [решено] Ежедневное копирование по одному файлу в день PhantomLo Скриптовые языки администрирования Windows 1 07-06-2014 01:13




 
Переход