|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перемещение файлов в папки по датам создания |
|
CMD/BAT - Перемещение файлов в папки по датам создания
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать
Здравствуйте!
Перечитал несколько десятков тем здесь и на других форумах, но так и не смог разобраться для решения моей задачи. Помогите, пожалуйста. Задача: Есть папка с входящей почтой, куда ежедневно валятся файлы разных форматов - "C:\Корреспонденция\Входящие\" Нужно, чтобы ежемесячно запускался батник (это в планировщике сделается на 01 число каждого месяца в 01:00 ночи), который: 1. Проверит даты создания всех файлов в папке "C:\Корреспонденция\Входящие\" и : 2. Создаст папку с номерами годов из дат создания файлов, если таких нет в "C:\Архив\" (например, "C:\Архив\2022") 3. Создаст папки с номерами месяцев, если таких нет в "C:\Архив\%ГОД%\" (например, "C:\Архив\2022\01") 4. Перенесет все файлы из "C:\Корреспонденция\Входящие\" в нужные папки в "C:\Архив\%ГОД%\%МЕСЯЦ%\" 5. Доп.плюшка - запись всех действий в файл-лог. В результате, папка "C:\Корреспонденция\Входящие\" должна быть пустой по окончанию работы батника. По идее, разные года будут только при первом запуске и при смене года. Заранее благодарен. |
|
Отправлено: 17:29, 13-01-2022 |
fascinating rhythm Сообщения: 6483
|
Профиль | Отправить PM | Цитировать Powershell:
$sourceFolder = "C:\Корреспонденция\Входящие" $destinationFolder = "C:\Архив" $log = "$destinationFolder\log.txt" dir "$sourceFolder" -File |% { $fileFolder = "$destinationFolder\$($_.LastWriteTime.ToString("yyyy\\MM"))" if (!(test-path "$fileFolder")) {mkdir "$fileFolder"; "INFO`t$((get-date).tostring())`tСоздана папка `"$fileFolder`"" >> "$log"} mv "$($_.FullName)" "$fileFolder" if ($?) {"INFO`t$((get-date).tostring())`tФайл `"$($_.FullName)`" перемещён в папку `"$fileFolder`"" >> "$log"} else {"ERROR`t$((get-date).tostring())`tФайл `"$($_.FullName)`" не удалось переместить в папку `"$fileFolder`"" >> "$log"} } |
------- Последний раз редактировалось DJ Mogarych, 13-01-2022 в 18:03. Отправлено: 17:56, 13-01-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать CMD
В предположении, что в системе дата отображается в формате ДД.ММ.ГГГГ
@Echo Off cls >nul Chcp 1251 Set "BoxIn=Z:\Корреспонденция\Входящие" Set "Mask=*.*" Set "BoxOut=Z:\Архив" Set "LogFile=Z:\Архив\%Date:~6,4%%Date:~3,2%%Date:~0,2%.log" >>"%LogFile%" (Echo.&Echo ===== %Date% %Time% =====&Echo.) Pushd "%BoxIn%" FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /O:-D /T:W "%BoxIn%\%Mask%"`) DO ( Set "DDMMYYYYhhmm=%%~tf" Call Set "MM=%%DDMMYYYYhhmm:~3,2%%" Call Set "YYYY=%%DDMMYYYYhhmm:~6,4%%" >nul 2>&1 Call MD "%BoxOut%\%%YYYY%%\%%MM%%" >nul Call Move /Y "%BoxIn%\%%f" "%BoxOut%\%%YYYY%%\%%MM%%\" &&>>"%LogFile%" Call Echo "%BoxOut%\%%YYYY%%\%%MM%%\" "%BoxIn%\%%f" ) Popd rem pause Exit /B А вот более эффективный варивнт: зачем в архиве хранить файлы живьем,
лучше их заархивировать @Echo Off cls >nul Chcp 1251 Set "BoxIn=Z:\Корреспонденция\Входящие" Set "Mask=*.*" Set "BoxOut=Z:\Архив" Set "LogFile=Z:\Архив\%Date:~6,4%%Date:~3,2%%Date:~0,2%.log" Set Arc="C:\Program Files\WinRAR\WinRar.exe" a -df -ep1 -ibck -logafp="%LogFile%" -y >>"%LogFile%" (Echo.&Echo ===== %Date% %Time% =====) FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /O:-D /T:W "%BoxIn%\%Mask%"`) DO ( If Exist "%BoxIn%\%%f" ( Set "DDMMYYYYhhmm=%%~tf" Call Set "MM=%%DDMMYYYYhhmm:~3,2%%" Call Set "YYYY=%%DDMMYYYYhhmm:~6,4%%" >nul 2>&1 Call MD "%BoxOut%\%%YYYY%%" >>"%LogFile%" (Echo.&Call Echo +++++ "%BoxOut%\%%YYYY%%\%%YYYY%%%%MM%%" +++++&Echo.) Call %Arc% -ta%%YYYY%%%%MM%% "%BoxOut%\%%YYYY%%\%%YYYY%%%%MM%%" "%BoxIn%\%Mask%" ) ) pause Exit /B Батники можно запускать хоть по 10 раз на дню. В батниках уточните путь. |
------- Последний раз редактировалось megaloman, 14-01-2022 в 17:19. Отправлено: 14:41, 14-01-2022 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Перемещение файлов в папки, названные по части имен файлов | NuclearBox | Скриптовые языки администрирования Windows | 5 | 13-02-2021 16:26 | |
CMD/BAT - [решено] Перенос файлов из папки в папку по дате создания | valedol_z@vk | Скриптовые языки администрирования Windows | 11 | 20-05-2020 09:44 | |
CMD/BAT - Перемещение файлов по маске с созданием папки по дате в названии файла | AndreH | Скриптовые языки администрирования Windows | 5 | 08-08-2018 09:14 | |
CMD/BAT - [решено] Создание папок исходя из дат создания файлов и перемещение их в эти папки | mezzin | Скриптовые языки администрирования Windows | 13 | 25-01-2018 18:38 | |
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания) | Systems | Скриптовые языки администрирования Windows | 18 | 03-10-2014 11:37 |
|