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

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

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку

Старожил


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

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


всем добрый день! Имеется задача перемещения устаревший файлов из папки, но не всех, а только недельной давности, что бы файлы за последнюю неделю сохранялись. Скрипт будет выполняться 2 раза в неделю. На данный момент имею вот такой скрипт, но перемещения файлов не происходит???!! Подскажите по чему!

@Echo Off
:: Параметры скрипта, 0 < $OLD < 29!
:: $OLD - столько ДНЕЙ храним архивы
Set $SRC=D:\obmen1
Set $DST=D:\Backup_Obmen1
Set $OLD=1
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%

:: копируем старые каталоги (файлы)
Call :GetOldDate %$OLD%
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$SRC%\??.??.????') Do If %%k%%j%%i LEQ %$Y%%$M%%$D% move /Y "%$SRC%\%%i.%%j.%%k %$DST%\"
:: Выход
EXIT

:GetOldDate
:: -----------------------------------
:: Расчет даты, предшествующей текущей
:: заданное количество дней (< 29)
:: -----------------------------------
Set /A $D -= %1
If %$D% GTR 0 GoTo GetOldDate_2
:: Месяц, год, дней в месяце
Set /A $M=%$M%+11-((%$M%+10)/12)*12
If %$M% EQU 12 Set /A $Y-=1
For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i
If %$M% NEQ 2 GoTo GetOldDate_1
:: Февраль високосного года
Set /A $B1=%$Y%-(%$Y%/4)*4
Set /A $B2=%$Y%-(%$Y%/100)*100
Set /A $B3=%$Y%-(%$Y%/400)*400
If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1
If 0 EQU %$B3% Set /A $X+=1
:: День месяца
:GetOldDate_1
Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X%
:: Форматирование даты
:GetOldDate_2
Set $M=0%$M%&Set $D=0%$D%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
GoTo :EOF

Отправлено: 10:11, 02-04-2010

 

Старожил


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

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


1. Запускать скрипт нужно из каталога, откуда файлы переносятся
2. Dst=C:\TEMP - это как раз папка, куда они переносятся. В сырце остался каталог, на котором я проводил проверку на своем компе.
3. Поскольку этот батник оставлял файлы за последние 5 разных дат, то рабочее название его было Last5.bat, и соответственно лог того, что делалось кидалось в файл Last5.log. Конечно, по-хорошему надо было написать так: %~dpn0.log или %~n0.log и имя лог-файла автоматом соответствовало бы имени скрипта, но я очень торопился и было лень сделать все красиво. Вообще, в лог нужно еще кидать дату/время, иначе это не лог...

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 12:10, 07-04-2010 | #11



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

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


Старожил


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

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


Как я понимаю, скрипт должен лежать в той папке где и перемещаемые файлы???? если в другой папке то скрипт не выполнится???? По шедуллеру можно этот скрипт выполнять?

Отправлено: 12:21, 07-04-2010 | #12


Старожил


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

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


Скрипт лучше всего держать в отдельной папке, вместе с другими скриптами, можно где-нить в софте. При этом скрипт будет аналогичен любой другой программе/внешней команде - можно вызывать практически откуда угодно (при всех ограничениях скриптов их несомненный плюс - открытый исходный текст, не требующий спец.софта для внесения изменений).
А вот запускать этот скрипт надо именно в папке-источнике, например лежит в D:\SOFT\Scripts\, а запускается (например поле "start in" в ярлыке) в E:\DB\1C\BackUp\, при этом отличие лог-файлов %~dpn0.log от %~n0.log будет в том, что в певом случае лог-файл ведется там, где расположен сам скрипт (D:\SOFT\Scripts\), а во втором случае - там, из какой папки запущен (E:\DB\1C\BackUp\).
Подобные скрипты обычно по шедулеру и запускаются.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:14, 07-04-2010 | #13


Старожил


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

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


NiOl, ты все очень подробно расписал, спасибо! Я только не пойму, как можно в шедулере запустить скрипт который лежит в C:\scripts\ что бы он запускался в D:\Obmen1C\ !! Не могу это сделать, подскажите как? Очень нужно!)

Отправлено: 13:34, 07-04-2010 | #14


Старожил


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

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


Думаю, что Вы уже создали "задание" для шедула. Теперь редактируем его (правая кнопка мыши - свойства)

В первой вкладке все основное, что нам нать:
1. Run: (строка запуска) = C:\scripts\script.bat
2. Start in: (запускать в каталоге) = D:\Obmen1C\
3. Comments (примечания) - на свое усмотрение, вообще полезно подписывать, какое задание для чего, например "пятничная чиска бэкапов 1С"
4. Run as (запускать от имени) = учетная запись, имеющая право логиниться на этот сервер и вносить необходимые изменения (удалять файлы в папке "D:\Obmen1C\") и рядом кнопка для указания пароля этой учетки.
5. Enabled (разрешено) - если галочка стоит, то задание будет исполняться.

На второй вкладке указывается периодичность вызова задания. В списке явно нехватает пунктов "каждые nn часов" и "каждые nn минут"

На третей вкладке дополнительные опции, определяющие некоторые условия выполнения задания, для большинства задач параметры по-умолчанию вполне подходят.

На четвертой - указаны права на само задание шедула, скажим та - на запуск задания и на редактирование задания.

-------
Как сказало Дерево Дровосеку: "я - пень".

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

Отправлено: 13:58, 07-04-2010 | #15


Ветеран


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

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


«Рабочая папка:» в свойствах созданного задания.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:02, 07-04-2010 | #16


Старожил


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

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


Всем спасибо за ответы!
NiOl, А как бы доработать приведенный в топике скрипт, учитывая то что расчет даты правильный, и необходимо только переместить файлы старше 5 дней (переменная OLD) в другую папку. Как я понимаю тут не праильно работает во эта команда, может все таки попробуем его доработать)))!!!
Цитата zavoruev:
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$SRC%\??.??.????') Do If %%k%%j%%i LEQ %$Y%%$M%%$D% move /Y "%$SRC%\%%i.%%j.%%k %$DST%\" »
Буду очень признателен за оказанную помощь!

Отправлено: 14:09, 07-04-2010 | #17


Старожил


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

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


Цитата zavoruev:
Всем спасибо за ответы!
NiOl, А как бы доработать приведенный в топике скрипт, учитывая то что расчет даты правильный, и необходимо только переместить файлы старше 5 дней (переменная OLD) в другую папку. Как я понимаю тут не праильно работает во эта команда, может все таки попробуем его доработать)))!!!
Цитата zavoruev:
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$SRC%\??.??.????') Do If %%k%%j%%i LEQ %$Y%%$M%%$D% move /Y "%$SRC%\%%i.%%j.%%k %$DST%\" »
Буду очень признателен за оказанную помощь! »
Логгер: на форуме молчание 15 минут...

наскоро просмотрев исходный скрипт, уделив особое вниманеи указанное строке, у меня вышло 1 предупреждение и 4 ошибки:

1. Процедура GetOldDate выходит по команде GoTo :EOF и я не уверен, насколько это допустимо. Обычно принято завершать процедуры командой Exit /b
(Рекомендую на всякий пожарный заменить последню строку скрипта)

2. Команда DIR в таком виде даст только названия каталогов, а не файлов.
3. Комада IF без ключа /i не воспринимает сравнение числовых величин.
4. В Команде Move указан только Источник, а Приемник не указан (пропущена пара кавычек).
5. У переносимых файлов нет расширения? (сомневаюсь)
В итоге строка переноса должна выглядить так: For /F "Tokens=1-3 Delims=." %%i In ('DIR /B /A %$SRC%\??.??.????.*') Do If /i %%k%%j%%i LEQ %$Y%%$M%%$D% move /Y "%$SRC%\%%i.%%j.%%k.*" "%$DST%\"

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 14:53, 07-04-2010 | #18


Старожил


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

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


Уважаемы NiOl,
при тестировании выполнения данного скрипта, премещение файлов не происходит, вот ошибки в логе
Skiping copy file.cmd (27.04.2010, wait=1)
Skiping creat and copy folders(Є®«-ў® ¤*Ґ©).cmd (05.04.2010, wait=2)
Skiping Creat and copy folders(Є®«-ў® Ї*Ї®Є).cmd (05.04.2010, wait=2)
Skiping Creat folders.cmd (01.04.2010, wait=3)
Skiping Last5.log (27.04.2010, wait=1)
Skiping copy file.cmd (27.04.2010, wait=1)
Skiping creat and copy folders(Є®«-ў® ¤*Ґ©).cmd (05.04.2010, wait=2)
Skiping Creat and copy folders(Є®«-ў® Ї*Ї®Є).cmd (05.04.2010, wait=2)
Skiping Creat folders.cmd (01.04.2010, wait=3)
Skiping Last5.log (27.04.2010, wait=1)
Skiping copy file.cmd (27.04.2010, wait=1)
Skiping creat and copy folders(Є®«-ў® ¤*Ґ©).cmd (05.04.2010, wait=2)
Skiping Creat and copy folders(Є®«-ў® Ї*Ї®Є).cmd (05.04.2010, wait=2)
Skiping Creat folders.cmd (01.04.2010, wait=3)

Отправлено: 17:03, 12-05-2010 | #19


Ветеран


Contributor


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

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


WinRar решает Вашу проблему в одну строчку в назначенных заданиях, и не надо изобретать велосипед. Разве что проблема в лицензии ... Если хотите, напишу
Цитата NiOl:
1. Запускать скрипт нужно из каталога, откуда файлы переносятся »
- это приведёт в конце концов к тому, что и скрипт перенесётся и запускать будет нечего. Это совершенно неверно, просто надо указывать полный путь в скрипте.

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


Отправлено: 18:21, 12-05-2010 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
7 / 2008 R2 - Перемещение папки Users в Windows 7 bab00n Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 28 17-03-2015 12:11
V. 5.5/2000/2003 - [решено] Скрипт для чистки общей папки от устаревших сообщений migunov Microsoft Exchange Server 2 21-11-2009 09:50
[решено] SVN, как добавить папку в svn-репозиторий без вложенных в папку файлов? pingUIN Хочу все знать 1 03-11-2009 17:16
Разное - [решено] Перемещение папки Users nikkor7 Microsoft Windows Vista 2 13-04-2009 11:58
[решено] Перемещение папки Users и изменение букв дискам средствами WAIK alcatraz Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 10 28-02-2009 03:04




 
Переход