Как показал опыт пакетные файлы, т.е. батники очень популярны среди системных администраторов, которые используют их в своих целях автоматизации. И сегодня мы продолжаем изучать эти самые bat файлы, рассматривать основы мы не будем, а перейдем уже к более продвинутым вещам.
В первой статье Написание bat файлов — примеры батников мы рассмотрели простые примеры использования батников, но как оказалось написание батников очень интересно практически всем и уже все хотят узнать что-то более сложное, с помощью которого можно еще больше упростить автоматизацию некоторых процессов.
Пример 1 – удаление старых архивов
При архивировании чего-либо, многих интересует вопрос «Как удалять старые архивы за ненадобностью с помощью батника?». Например, все они лежат в одной папке и нужно удалять все архивы, которые старше 14 дней. После того как я почитал мануалы, полазил в Интернете, я могу предложить следующий способ.
Можно сделать так, что в папке с архивами будут храниться только определенное количество архивов, соответственно последних (т.е. как раз в нашем случае за последние 2 недели).
Это делается с помощью двух команд. Первая, это DIR, т.е. просто считываем все файлы в одной папке, и записываем их название в текстовый файл.
dir D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt
где,
- dir D:\arhiv\*.rar – это означает, что мы считываем все rar архивы в папке D:\arhiv\;
- /a:-D – это означает, что будут выводиться все файлы с указанными атрибутами, ключ -D означает, что нам нужны только файлы, не каталоги, префикс «-» как раз имеет значение отрицание, т.е. не каталоги, если бы мы написали просто D, то он считывал бы и каталоги;
- /b – это вывод только имен файлов;
- /o:-D – это сортировка, ключ –D означает, что будет выполнена сортировка по дате, но сначала более старые, для исправления этого мы уже знаем, что нам поможет префикс «-»;
- > — означает, что будет выполнено перенаправление вывода в файл list_of_files.txt, назвать можете по-другому.
Вот мы считали все наши архивы и записали их в файл, далее нам нужно перебрать все эти файлы и оставить только 14 штук, т.е. за последние 2 недели. Это делаем с помощью команды FOR, это своего рода цикл, который выполняет определенное действие для каждого файла в папке или каждой строки в файле, как в нашем случае.
for /F «skip=13» %%i in (list_of_files.txt) do (del /Q «%%i»)
где,
- for – сама команда для переборки;
- /F «skip=13» – это ключ с параметром, который означает, что не нужно обрабатывать первые 13 файлов, т.е. мы их пропускаем. Почему 13, а не 14 да потому что 14 архив (т.е. сегодняшний, который должен создаться при выполнении этого батника) еще не создался, поэтому и 13;
- %%i – переменная, в которой хранится название текущего файла;
- In (list_of_files.txt) – означает, что перебирать все строки именно в этом файле;
- do (del /Q «%%i») — говорит, что необходимо сделать с каждым, в нашем случае мы просто удаляем эти файлы с помощью del /Q ключ /Q, для того чтобы у нас не спрашивали подтверждения перед удалением. Советую для тестов del /Q заменить на echo, т.е. просто вывести на экран те файлы.
Итого у нас получился вот такой батник:
dir D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt
for /F «skip=13» %%i in (list_of_files.txt) do (del /Q «%%i»)
Соответственно после этих строк можете писать сам код архивации, и в итоге у нас получится то, что в нашей папке будет храниться только 14 архивов, конечно же, самых последних.
Пример 2 – использование переменных
В батниках можно даже использовать переменные, как в настоящем языке программирования. Рассмотрим простейший пример использования переменных, например, мы хотим умножать на 2 число, которое мы введем в поле при запуске батника.
@echo off
SET a=2
SET /p b=[введите второе число для умножения]
SET /a c=%a%*%b%
echo %c%
pause
Как вы поняли, переменные задаются с помощью команды SET. Для того чтобы использовать переменную в дальнейшем мы с обеих сторон переменной подставляем знак процента (%), для того чтобы командная строка поняла, что это именно переменная.
- @echo off – для того чтобы наши команды не отображались на экране;
- SET a=2 – это просто задаем переменной «a» значение;
- SET /p b=[введите второе число для умножения] – это мы задаем переменной «b» значение, которое мы введем в поле, для того чтобы батник понял, что мы хотим сами ввести значение переменной, используется ключ /p;
- SET /a c=%a%*%b% — задаем переменной «c» результат нашего выражение (в нашем примере это умножение);
- echo %c% — выводим на экран значение переменной «c»;
- pause – это мы просто ставим на паузу выполнение нашего bat файла, чтобы просто на всего увидеть все результаты.
Кстати, для того чтобы у Вас русские буквы нормально отображались в командной строке, сохраните бат файл в кодировке DOS-866.
С переменными разобрались, теперь давайте, применим это к нашему первому примеру, допустим, мы хотим оставлять не 14 архивов, а то количество, которое сами захотим, для этого мы с Вами при запуске батника будем вводить число архивов, которое нужно сохранить. Получится примерно вот так:
@echo off
SET /p chislo=[сколько архивов сохранить?]
dir D:\test\*.rar /a:-D/b/o:-D > list_of_files.txt
for /F «skip=%chislo%» %%i in (list_of_files.txt) do (del /Q «%%i»)
Ну вот, примерно так, конечно на практике может это и не понадобится, но зато мы узнали, как можно использовать переменные.
Про переменные хочу еще сказать, что есть такие системные переменные как:
%DATE% — показывает текущую дату.
%TIME% — показывает текущее время.
Для примера выполните следующий код:
echo %DATE%
echo %time:~0,-3%
pause
Переменную %TIME% я написал именно таким образом, для того чтобы результат вывелся в более читабельном виде, попробуйте написать %TIME% и % TIME:~0,-3% у Вас, во втором случае уберутся 3 последних знака.
На самом деле системных переменных больше, просто эти могут потребоваться чаще остальных.
Пример 3 – оператор условного выполнения IF
Как и в других полноценных языках в батниках можно использовать оператор условного выполнения IF. Приведем небольшой пример, батник просто проверяет, существует файл или нет:
@echo off
IF EXIST test.txt (
echo Файл существует
) ELSE (
echo Файла такого нет
)
Pause
где,
IF EXIST test.txt – это как раз и идет проверка на наличие файла.
После, в скобках, идет то, что мы хотим сделать, если файл существует, а если файла не существует, то после ELSE, идет то, что нужно выполнить при отсутствии файла.
Теперь немного модифицируем наш пример с умножением на 2 введенное нами число, просто, если вдруг мы введем ноль, мы выведем соответствующие сообщение и попросим ввести заново число.
@echo off
SET a=2
:metka
SET /p b=[введите второе число для умножения]
SET /a c=%a%*%b%
if %c%==0 (echo вы ввели число 0, введите другое) else echo %c%
if %c%==0 (goto:metka)
pause
Тут уже все знакомо, единственное, что при сравнении переменной «c» используется оператор сравнения == (два равно), так как просто равно (=) — это оператор присваивания. Если Вы заметили я здесь использовал оператор goto, т.е. переход к нужной метки. Другими словами, ставим метку и в зависимости от результата проверки условия, будет осуществлен переход к нужной метке.
Теперь хотелось бы отметить то, что многие используют в работе, например, для создания архива, программу winrar и, конечно же, используют ее в своих батниках, но многие задают вопросы по ключам, которые относятся к winrar. Вы не путайте ключи winrar, они используются только для этой программы, а не для всего, что есть в батниках, т.е. командной строке, например, если Вы используете 7zip, то ключи уже будут другие. Что касается ключей winrar то, полный и лучший справочник, на мой взгляд, есть, конечно же, в самом winrare. Для того чтобы посмотреть описание ключей winrar, откройте программу winrar зайдите в меню Справка, затем нажмите «Содержание», а далее выберите в самом содержание строку «Режим командной строки», где и будет описание всех ключей, даже приводятся простенькие примеры. Соответственно если у Вас английская версия winrar, то смысл такой же, только будет все на английском языке.
На этом вторая наша часть изучения батников закончена. Удачи!
А подключение к IRC как реализовать? Так скажем, запускается комп и коннектится к IRC.
Всем привет!
Подскажите плиз, как написать батник для проверки пустых папок на флешке, а затем вывести список с именами пустых папок…это нужно для контроля выгруженной информации на флешку, т к папок много и работа по выгрузке рутинная, поэтому оператор может пропустить какой нить каталог…а тут батник запустил и визуально проверил…
Еще можно, узнать дату файла:
for %%a in (\\Server1\Box\123.txt) do echo %%~ta
Команда выведет на экран дату документа
Добрый день. Я занимаюсь видеосъемкой и есть необходимость кодирования дисков от перезаписи, но царапание дисков по краю и ряд других способов уже обходятся. Я подумал что можна в диск подкидывать bat файлик который бы запрещял перезапись ДВД диска или заполнял бы буфер чем нибуть другим при попытке копирования или другие варианты без нанесения вреда.
Заранье спасибо за ответ, а сам пойду еще погуглю может нарою чего ))
Добрый день.
Не отрабатывает эта часть кода: for /F «skip=13» %%i in (list_of_files.txt) do (del /Q «%%i»)
выпадает с ошибкой:»не удаётся найти» и путь указывает на диск «С», хотя искомые фалы лежат на «D» Текстовый файл создаёт по правильному пути на «D». подскажите что не так
Привет!
Возможно у тебя в папке D:\arhiv\ нет rar архивов. Проверь расширение архивов в данном случае оно должно быть .rar, если у тебя дрогой формат архивов, то измени расширение в батнике в строке D:\arhiv\*.rar, например на .zip.
Также проверь, возможно, у тебя есть пробелы в название архивов, если они есть, то замени их, например, на нижнее подчеркивание.
Подскажите пож как написать батник что бы удалить пустые файлы с розширением *.dat в каталоге C:\ARC
Спасибо..
Напишите пожалуйста 2 команды для bat файла. Что они должны выполнять:
1-Делает наушники устройством по умолчанию
2-Делает динамики устройством по умолчанию
Объясните пожалуйста популярно как внести в заголовки большого количества текстовых файлов их имена,а затем объединить файлы в 1 файл,в котором составляющие файлы разделялись бы пустыми строками или чертами.Спасибо.
Здравствуйте!
Подскажите, пожалуйста. Написал batник для вызова синего экрана через программу NotMyFault:
@echo off
>nul chcp 1251
start /min /wait e:\»Program portable»\NotMyFault\not myfault64.exe /silent /crash
exit
Но просит присвоить одно из значений:
notmyfault [/crash] [/bugcheck ] [/hang]
Как присвоить правильно значение crash? Как добиться скрытого вызова синего экрана?