|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скопировать из множества папок по одному самому новому файлу с переименованием. |
|
CMD/BAT - [решено] Скопировать из множества папок по одному самому новому файлу с переименованием.
|
Пользователь Сообщения: 59 |
Здравствуйте.
Задача - собрать (скопировать по маске) из множества папок по одному последнему созданному в них файлу в целевую папку. И при копировании присвоить этим файлам имена исходных папок. Хотелось это сделать через присвоение множества папок одной переменной, поскольку папки могут быть в разных местах и на разную глубину: set "F01=D:\FOLDER1" set "F02=D:\FOLDER2" set "F03=D:\FOLDER3" set FSET="%F01%" "%F02%" "%F03%" Для копирования последних созданных файлов нашел на форуме код уважаемого megaloman http://forum.oszone.net/thread-224061.html Но связать все это вместе не смог. Прошу помочь. Или подскажите альтернативное решение. |
|
Отправлено: 00:47, 12-09-2021 |
Пользователь Сообщения: 59
|
Профиль | Отправить PM | Цитировать megaloman, большое спасибо. Это как раз то решение, на которое я замахнулся и не осилил.
Не так лаконично, как предложил alpap, но для меня очень ценно, чтобы понимать, как использовать множества папок и масок через общую переменную. Параметр /s для обхода подпапок исключу, в моем случае он лишний. По нумерации - вариант, но для визуального контроля удобнее вариант alpap - зная код, можно быстро определить какой файл с повторяющимся именем из какой папки пришел, или не пришел. С советом предварительно очищать OUT соглашусь и учту. Очень благодарен. Еще раз спасибо всем за помощь. |
Отправлено: 22:54, 12-09-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата NuclearBox:
|
|
------- Отправлено: 23:04, 12-09-2021 | #12 |
Пользователь Сообщения: 59
|
Профиль | Отправить PM | Цитировать megaloman, Точно, спасибо.
|
Отправлено: 23:52, 12-09-2021 | #13 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать megaloman, Да, логично, не подумал об этом. Круто и даже избыточно.
|
Отправлено: 00:38, 13-09-2021 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать А теперь задача со звёздочкой: если там а) и впрямь копирование, б) в пределах одного раздела, в) в скопированные файлы не вносится изменений — вместо копирования создаём жёсткие ссылки
![]() |
Отправлено: 19:46, 13-09-2021 | #16 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|