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

Компьютерный форум 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

 

Старожил


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

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


Товарищи)))) поготите пож-та, я знаю что ошибка у меня вот здесь
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%\"
но т.к я не пишу скрипты не пишу, ошибку найти не могу. Жду совета или лучше всего ответа!!!

Отправлено: 12:52, 05-04-2010 | #2



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

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


Старожил


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

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


Неблагодарное занятие - копаццо в чужих скриптах (или в своих старых) - трудно разобраться.
Что сразу бросилось в глаза - в ищите только каталоги (dir /A:D), при этом команда Move может только переименовывать каталоги, но не переносить.
Что касается календаря - сам с такими вычислениями в пакетниках не разбирался, здесь мне проверять сложно.

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


Отправлено: 13:12, 05-04-2010 | #3


Старожил


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

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


Цитата NiOl:
(или в своих старых) - трудно разобраться »
вот это верно подмеченно, скрипт не мой, а Ваш! И мне бы хотелось что бы основная задача решалась, но не получается!
по этому прошу помочь в составлении нового, либо редактировании старого скрипта

На счет команды DIR, вот ключи с которыми она делается, это ни как не каталоги
/A Вывод файлов с указанными атрибутами.
атрибуты D Каталоги R Доступные только для чтения
H Скрытые файлы A Файлы для архивирования
S Системные файлы Префикс "-" имеет значение НЕ
/B Вывод только имен файлов.

И Команда Move
Перемещение одного или более файлов:
MOVE [/Y | /-Y] [диск:][путь]имя_файла1[,...] назначение

Переименование папки:
MOVE [/Y | /-Y] [диск:][путь]имя_папки новое_имя_папки

Тогда как же переместить папки?

Отправлено: 14:24, 05-04-2010 | #4


Старожил


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

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


1. Прям "Операция-Ы" - "извините, не НАШ, а ВАШ!" - этот скрипт точно не мой, я не люблю переменные записывать в таком формате, да и ремарки через двоеточие - моветон. (ну да это не вопрос, а так, шутки ради)
2. Если вывести DIR с ключем /A - на экране окажутся все файлы и каталоги, а с ключом /A:D - исключительно каталоги (попробуйте в командной строке). Далее, маска файлов/каталогов. До XP маска вида ??.??.???? работала однозначно, а сейчас выходит так, что последний знак вопроса является астериском
3. Папки перемещать очень сложно, появлется куча искажений там, где в файлах и папках встречаются спецсимволы типа пробела и прочих. Самый простой (но медленный ) способ - скопировать xcopy и затем удалить.
4. Вот аккуратный подсчет времени - проблема, которой я ниразу не баловался.
Если проблему можно описать другим способом, с более простыми условия, тогда можно попробовать...

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


Отправлено: 15:39, 05-04-2010 | #5


Старожил


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

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


с удовольствием))) Мне надо что бы в папке оставались файлы недельной давности, этот скрипт я взяд в качестве примера, т.к на рабоих файлах эксперементировать не стал! Хотел добиться одного, перемещение каталогов, а с файлами было бы легче.

Есть папка, в нее скапливаются выгрузки из 1С, формат файла таков DATA260.ARJ и если файл большой то он вот в таком формате DATA265.A01, DATA265.A02, DATA265.A03. эти выгрузки происходят раз в день а иногда и 2 раза. мне необходимо что бы в данной папке после отработки скрипта оставались только файлы недельной давности (их может быть 5, если формат такой DATA260.ARJ, или 15 если формат токой DATA265.A02). Ни каких спец. символов нет. Эти файлы перемещаются для бэкапа в другую папку, где раз в месяц делается бэкап winrar.

Отправлено: 15:51, 05-04-2010 | #6


Старожил


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

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


Сейчас попробЫвал сделать тестовый скрипт не для перемещения а для копирования созданных каталогов! результата нет! Вот код:
@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%
:: Создаем каталог
Mkdir %$SRC%\%$D%.%$M%.%$Y%\

:: копируем старые каталоги (файлы)
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% XCopy /S/E/D/C/Q "%$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

Отправлено: 16:57, 05-04-2010 | #7


Старожил


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

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


Насколько понимаю - каталог бэкапа не содержит подкаталогов, т.е. достаточно переносить только файлы.
Предлагаю такой вариант решения задачи (если устроит - смогу быстренько накидать) - в папке, где запускается скрипт, остаются все файлы с 5 РАЗЛИЧНЫМИ НАИСВЕЖАЙШИМИ датами.
Возможные глюки: Если по какой-то причине в какой-то из дней не появилось новых файлов, то после скрипта останутся файлы не за последние 5 дней, а на 1 день больше.
Как такой вариант?

ЗЫ: Архивировать *.ARJ винраром - только прибавлять в весе...

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


Отправлено: 17:56, 05-04-2010 | #8


Старожил


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

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


Вот:
Код: Выделить весь код
@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set Dst=C:\TEMP\

for /f "tokens=* delims=" %%F in ('dir /a-d /b /o-d') do if "!N!"=="5" (
move /Y %%F %Dst%
Echo Moving %%F ^(!D!^) Err=!ErrorLevel! >>Last5.log
) else (
set D=%%~tF
set D=!D:~0,10!
if not "!D!"=="!P!" (
set P=!D!
set /a N+=1
)
echo Skiping %%F ^(!D!, wait=!N!^)>>Last5.log
)

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


Отправлено: 18:24, 05-04-2010 | #9


Старожил


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

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


NiOl, , все хорошо, только я не пойму где в этом скрипте указана директории куда перемещать файлы.
Как я понимаю
Цитата NiOl:
set Dst=C:\TEMP »
это каталог откуда перемещаются файлы,
и что это за файл
Цитата NiOl:
Last5.log »
, что в него записывается?

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



Компьютерный форум 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




 
Переход