![]() |
Как создать бат, чтобы проверял число месяца?
Задача такая.
Есть файл в директории 1. Его нужно один раз в месяц копировать из директории 1 в директорию 2. Эта операция должна происходить в промежутке с 20 по 30 число месяца (и не больше одного раза за период, т.е. если мы двадцать третьего числа запустили бат, он сработал, то чтобы в этом месяце он больше уже не срабатывал). Не доходит, помогите пжлст |
Код:
@echo off |
AHTuKuJIJIeP, сделано неплохо, вот только копия файла уже существует и скрипт не отработает а если убрать проверку существования копии (которая сама не исчезнет), то при повторном запуске твой скрипт заново будет копировать файл.
предлагаю вести лог и по нему и отслеживать была ли сделана копия: Код:
@Echo off 1. если копия файла окажется защищена или занята, то копирования не произойдет - смотрите лог 2. малость упростил проверку - копирование возможно не с 20 по 30, а просто с 20 (т.е. и 31го тоже) Если второе замечание критично - легко поправлю проверку. |
Код:
Set SRC=C:\TEST1\file.txt |
NiOl, здОрово, спасибо, ваше работает. Вы не могли бы как-то всё прокомментировать для тех, кто не очень? А т оя не очень..
amel27, а в вашем случае он полюбому копирует с заменой.. |
Цитата:
|
amel27, вроде работает.
Единственное, что - очень вас прошу, для тех кто совсем в танке, прокомментируйте поподробнее, не "в общем", а "как и чего". очень прошу :cry: |
Цитата:
Откючаем эхо команд (чтоб сам скрип на экране не выводился) и разрешаем "новшества" в командах от Большого Билла Код:
@Echo off Код:
Set File=C:\1\MyFile.dat Код:
set Msg=Nothing to do Вторая строчка использует переменную %date% вида 07.12.2009 и из нее строит готовый текст, состоящий из: 4х символов с 6й позиции (год) + символ "-" + 2 символа с 3й позиции (месяц) + "-" + 2 символа с 0й позиции (число) + "_" + уже полученное время (вида 20-30-19,54, где ":" заменено на "-") без 3х последних символов. (уфф) * см. set /? Код:
set tm=%time::=-% Код:
set Chk=%tm:~8,2% Код:
set Chk=%tm:~0,7% Но результат поиска будет выведен на экран, а нам надо затолкать его в переменные и анализировать. Поэтому команда вызывается внутри цикла, рабирающего строку или читающего текстовые файлы или перехватывающего вывод на экран (как в данном случае). В цикле сказано, что данные разделены на "столбцы" символом ":" (delims) и что нас интересует первый столбец в первой переменной (%%D), а второй и все остальные ("2*") столбцы - во вторую переменную (по алфавиту это будет %%E). (*задним числом можно сказать, что нам плевать на остальные столбцы - думал те данные понадобятся) Цикл пройдет по всем строкам, где FindStr нашел отметку об успешном копировании и первый столбец (с датой) по очереди положит в переменную %Last%. В итоге получим дату самого-присамого последнего копирования: Код:
for /f "Tokens=1,2* Delims=:" %%D in ('FindStr /i /c:"Synchronization Done" %~dpn0.log') do set Last=%%D Если год и месяц текущей даты и даты последнего копирования совпадают, значит копирование в этом месяце уже было и ничего не нужно делать - переходим в конец с уже заготовленным сообщением "Nothing to do". Код:
set Last=%Last:~0,7% Если Код Выхода команды (Код Ошибки) Copy равен нулю - значит все прошло успешно (готовим соответствующее сообщение), в противном случае готовим другое сообщение, куда по-хорошему можно было добавить сам код ошибки (например 2="файл не найден" и т.д. - коды ошибок можно посмотреть в иНете. Особенность: переменную с Кодом Ошибки можно прочитать только раз - в следующий раз там будет результат, которым закончилось само чтение Кода Ошибки!) Код:
copy /y %File% %BackUp% Код:
:End |
Время: 23:46. |
Время: 23:46.
© OSzone.net 2001-