|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] backup файлов прошлого месяца |
|
|
Любой язык - [решено] backup файлов прошлого месяца
|
Пользователь Сообщения: 94 |
Добрый день!
Есть необходимость написать BAT-файл, который бы архивировал файлы прошлого месяца и складывал в отдельную папку. Вот мои наброски - но что то пошло не так (не работает). Подсобите пожалуйста. @echo on set param=%1 set source=f:\Share\LOGS\%param:"=% set dst=%source%\bkp set dst_tmp=%dst%\tmp echo %date% set d=%date:~0,2% set /a m=%date:~3,2%-1 set y=%date:~6,4% if %m:~0,1% neq 1 set m=0%m% set date_prep=%y%%m%%d% set date_ym=%y%%m% echo %date_prep% if not exist "%dst%" md "%dst%" if not exist "%dst_tmp%" md "%dst_tmp%" pause if %param% == "bkp" goto expt goto for :expt echo "ќвг Ї*ЇЄг *Ґ ва®Ј*Ґ¬" goto end :for forfiles /m *%date_ym%*.* -p "%source%" /C "cmd /c move @file \"%dst_tmp%\"" goto bkp :bkp "%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 "%dst%\%param:"=%_%date_ym%.zip" "%dst_tmp%\*.*" IF %ERRORLEVEL%==0 goto ok goto end :ok del "%dst_tmp%\*.*" /q rd "%dst_tmp%" goto end :end |
|
Отправлено: 15:24, 13-09-2018 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 06:14, 14-09-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать it3, не надо в батниках пытаться работать с датой - потом запустите его в системе с другой локалью и получите полный ахтунг. Пользуйтесь WSH, PoSh.
|
Отправлено: 11:07, 14-09-2018 | #3 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Busla:
|
|
Отправлено: 11:31, 15-09-2018 | #4 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата it3:
Опишите подробнее условия и что именно требуется. Архивируются все файлы или определенного типа, или целиком каталог с подкаталогами? и т.д., и т.п. |
||
------- Отправлено: 13:48, 15-09-2018 | #5 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
W:\LOGS\Folder1\ W:\LOGS\Folder2\ W:\LOGS\Folder3\ W:\LOGS\Folder4\ В них находятся *.txt файлы разного наименования. Необходимо, чтобы все файлы, кроме тех что созданы в текущем месяце, архивировались и складывались сюда с таким именем: W:\LOGS\Folder1\bkp\Folder1_201805.zip W:\LOGS\Folder2\bkp\Folder2_201806.zip W:\LOGS\Folder3\bkp\Folder3_201807.zip W:\LOGS\Folder4\bkp\Folder4_201808.zip |
|
Отправлено: 14:37, 15-09-2018 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать it3,
Вот решение по Вашей идеологии, пропишите свои пути и подпапки
Если конкретно указывать папки, то
@Echo Off cls Set "BoxIn=Z:\Share\LOGS" Set "SubBox="Folder1" "Folder2" "Folder3" "Folder4"" Set "Mask=*.txt" rem Set "Mask=*.*" Set ARC="%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 -sdel rem Set ARC="%ProgramFiles%\7-Zip\7z.exe" a -tzip -mx9 -sdel FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d" Set "Xdate=%Tdate:~4,2%-01-%Tdate:~0,4%" Set /A Zdate=%Tdate:~0,4%%Tdate:~4,2% If %Zdate:~4,2%==01 (Set /A Zdate=%Zdate%-89) Else (Set /A Zdate=%Zdate%-1) For %%d In (%SubBox%) Do Call :ArcDir "%BoxIn%" "%%~d" "%Mask%" "%Xdate%" "%Zdate%" Pause GoTo :Eof :ArcDir Echo "%~1\%~2\%~3" "%~2_%~5" Set "Source=%~1\%~2" Set "Dst=%Source%\bkp" Set "Dst_Tmp=%Dst%\tmp" If Not Exist "%Dst_Tmp%" md "%Dst_Tmp%" Pushd "%Dst_Tmp%" || (Echo "%Dst_Tmp%" not found &Exit /B 1) xcopy /l /D:%~4 "%Source%\%~3" "%Tmp%" >"%Dst_Tmp%\~tmp.tmp" 2>nul FOR /F "usebackq delims=" %%f in (`xcopy /L /D /Exclude:~tmp.tmp "%Source%\%~3"`) DO If Exist "%%f" Move /Y "%%f" "%Dst_Tmp%\" >nul Del ~tmp.tmp %Arc% "%Dst%\%~2_%~5.zip" %3 >nul Popd GoTo :Eof @Echo Off
cls
Set "BoxIn=Z:\Share\LOGS"
Set "Mask=*.txt"
Set ARC="%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 -sdel
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Xdate=%Tdate:~4,2%-01-%Tdate:~0,4%"
Set /A Zdate=%Tdate:~0,4%%Tdate:~4,2%
If %Zdate:~4,2%==01 (Set /A Zdate=%Zdate%-89) Else (Set /A Zdate=%Zdate%-1)
FOR /F "usebackq delims=" %%d in (`Dir "%BoxIn%" /A:D /B 2^>nul`) DO (
Call :ArcDir "%BoxIn%" "%%~d" "%Mask%" "%Xdate%" "%Zdate%"
)
Pause
GoTo :Eof
И далее процедура из предыдущего кода
|
------- Последний раз редактировалось megaloman, 17-09-2018 в 09:41. Причина: Дополнение решения в связи с уточнением постановки Отправлено: 20:55, 15-09-2018 | #7 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать it3, и это все подробности? м-да...
Ок. Как часто будет происходить архивация - ежедневно, еженедельно, ежемесячно? Если чаще, чем ежемесячно, то что делать при совпадении имени архива? Что делать с исходными файлами - удалять или оставлять? Есть ли какие-либо подкаталоги или файлы в корневом каталоге, а также в подкаталогах "Folder*", кроме обозначенных *.txt? Временное решение: powershell function arch-filter { process{ $dname = $_.basename if(!(test-path ( $a = $_.fullname + $f_bck ) -patht container)){md $a|out-null} $arr = dir $_.fullname -filt $flt2 -file|%{ if($_.lastwritetime.month -le (get-date).addmonths(-1).month){ $_.fullname } } if($arr){ compress-archive $arr ($a+'\'+$dname+( '_{0:yyyy-MM-dd_HH-mm}' -f (get-date))+'.zip' ) #если требуется удаление исходных файлов, то раскомментировать следующую строку #del (gi $arr).fullname -force } else { write-host "В каталоге $dname файлы для архивирования отсутствуют." -foreg yellow } } } $fld = 'logs' #корневой каталог, лучше указать абсолютный путь $f_bck = '\bkp' #подкаталог для хранения архивов (обязательный формат со слешем) $flt1 = 'folder*' #фильтр для отбора каталогов содержащих файлы *.txt $flt2 = '*.txt' #фильтр для отбора только файлов *.txt dir $fld -filt $flt1 -dir|arch-filter |
------- Последний раз редактировалось YuS_2, 16-09-2018 в 08:37. Причина: поправил код Отправлено: 21:14, 15-09-2018 | #8 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Есть каталоги: W:\LOGS\Любое имя1\ W:\LOGS\Имя любое2\ W:\LOGS\Третье имя3\ W:\LOGS\Разное4\ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... В них находятся *.txt файлы разного наименования. Необходимо, чтобы все файлы, кроме тех что созданы в текущем месяце, архивировались и складывались сюда с таким именем: W:\LOGS\Любое имя1\bkp\Любое имя1_201805.zip W:\LOGS\Имя любое2\bkp\Имя любое2_201806.zip W:\LOGS\Третье имя3\bkp\Третье имя3_201807.zip W:\LOGS\Разное4\bkp\Разное4_201808.zip ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... |
|
Отправлено: 09:00, 17-09-2018 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать it3,
Цитата Популярная застольная песТня:
|
|
------- Отправлено: 09:39, 17-09-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Удаление всех файлов в папке бекап - кроме первой записи каждого месяца | fabble86@vk | Скриптовые языки администрирования Windows | 12 | 13-12-2017 12:34 | |
CMD/BAT - [решено] Копирование файлов бекапов из папок за 1,10,20 число каждого месяца | alevakr | Скриптовые языки администрирования Windows | 4 | 17-11-2017 10:52 | |
2008 R2 - [решено] Не могу создать Backup задачу через планировщик. Windows Server Backup/ | deem73 | Windows Server 2008/2008 R2 | 4 | 23-12-2014 09:03 | |
CMD/BAT - BackUp файлов с выбором папок | codi28 | Скриптовые языки администрирования Windows | 0 | 10-05-2014 16:49 | |
CMD/BAT - Бекапирование Оутлук заблокированных pst файлов (backup Outlook) почты через bat/cmd | biossa | Скриптовые языки администрирования Windows | 0 | 28-09-2011 22:02 |
|