BAT файлы – примеры батников (Часть 2)

Как показал опыт пакетные файлы, т.е. батники очень популярны среди системных администраторов, которые используют их в своих целях автоматизации. И сегодня мы продолжаем изучать эти самые 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, то смысл такой же, только будет все на английском языке.

На этом вторая наша часть изучения батников закончена. Удачи!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 10
  1. Дмитрий

    А подключение к IRC как реализовать? Так скажем, запускается комп и коннектится к IRC.

  2. Андрей

    Всем привет!
    Подскажите плиз, как написать батник для проверки пустых папок на флешке, а затем вывести список с именами пустых папок…это нужно для контроля выгруженной информации на флешку, т к папок много и работа по выгрузке рутинная, поэтому оператор может пропустить какой нить каталог…а тут батник запустил и визуально проверил…

  3. chetverg

    Еще можно, узнать дату файла:
    for %%a in (\\Server1\Box\123.txt) do echo %%~ta
    Команда выведет на экран дату документа

  4. Владимир

    Добрый день. Я занимаюсь видеосъемкой и есть необходимость кодирования дисков от перезаписи, но царапание дисков по краю и ряд других способов уже обходятся. Я подумал что можна в диск подкидывать bat файлик который бы запрещял перезапись ДВД диска или заполнял бы буфер чем нибуть другим при попытке копирования или другие варианты без нанесения вреда.
    Заранье спасибо за ответ, а сам пойду еще погуглю может нарою чего ))

  5. Ruslan

    Добрый день.
    Не отрабатывает эта часть кода: for /F «skip=13» %%i in (list_of_files.txt) do (del /Q «%%i»)

    выпадает с ошибкой:»не удаётся найти» и путь указывает на диск «С», хотя искомые фалы лежат на «D» Текстовый файл создаёт по правильному пути на «D». подскажите что не так

    1. Админ (автор)

      Привет!
      Возможно у тебя в папке D:\arhiv\ нет rar архивов. Проверь расширение архивов в данном случае оно должно быть .rar, если у тебя дрогой формат архивов, то измени расширение в батнике в строке D:\arhiv\*.rar, например на .zip.
      Также проверь, возможно, у тебя есть пробелы в название архивов, если они есть, то замени их, например, на нижнее подчеркивание.

  6. Александр

    Подскажите пож как написать батник что бы удалить пустые файлы с розширением *.dat в каталоге C:\ARC
    Спасибо..

  7. vadim

    Напишите пожалуйста 2 команды для bat файла. Что они должны выполнять:
    1-Делает наушники устройством по умолчанию
    2-Делает динамики устройством по умолчанию

  8. Виталий

    Объясните пожалуйста популярно как внести в заголовки большого количества текстовых файлов их имена,а затем объединить файлы в 1 файл,в котором составляющие файлы разделялись бы пустыми строками или чертами.Спасибо.

  9. Артур

    Здравствуйте!
    Подскажите, пожалуйста. Написал 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? Как добиться скрытого вызова синего экрана?

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.