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. Приведем небольшой пример, батник просто проверяет, существует файл или нет:
@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 то смысл такой же только будет все на английском языке.
На этом вторая наша часть изучения батников закончена. Удачи!
- Ограничения в Microsoft SQL Server - что это такое и как их создать?
- Как узнать размер базы данных в Microsoft SQL Server?
- Инструкция INSERT INTO в Transact-SQL – несколько способов добавления данных в таблицу
- Где выгодней обменять электронные деньги (валюту)?
- MX Linux 17.1 – установка и описание дистрибутива
- Вычисляемые столбцы в Transact-SQL
- Инструкция SELECT INTO в T-SQL или как создать таблицу на основе SQL запроса?
- Как установить бесплатную версию антивируса Bitdefender?
- Системная процедура sp_configure - установка параметров конфигурации в Microsoft SQL Server
- Составные операторы присваивания в Transact-SQL
-
«Синий экран смерти» коды ошибок
-
Как прописать статический маршрут? И зачем он нужен?
-
Написание bat файлов - примеры батников
-
Графические оболочки Linux - обзор и сравнение популярных рабочих столов KDE, Xfce, MATE и других
-
Основы программирования и основные языки программирования
-
Основы командной строки Windows
-
Как установить Microsoft .NET Framework 4.0 на Windows 7? и что это такое?
-
10 Причин не включения компьютера
-
Описание и краткая инструкция по работе с Acronis Disk Director Suite
-
Устройство и основные понятия локальной сети
-
Основные настройки Microsoft Windows Server 2003
-
Основы языка WEB программирования HTML
-
Полезная настройка при подключении модема МТС-коннект
-
BAT файлы – Примеры батников (Часть 2)
-
Установка MS SQL Server 2008 Express и Management Studio Express
Комментарии
Подскажите плиз, как написать батник для проверки пустых папок на флешке, а затем вывести список с именами пустых папок...это нужно для контроля выгруженной информации на флешку, т к папок много и работа по выгрузке рутинная, поэтому оператор может пропустить какой нить каталог...а тут батник запустил и визуально проверил...
for %%a in (\\Server1\Box\123.txt) do echo %%~ta
Команда выведет на экран дату документа
Заранье спасибо за ответ, а сам пойду еще погуглю может нарою чего ))
Не отрабатывает эта часть кода: for /F "skip=13" %%i in (list_of_files.txt) do (del /Q "%%i")
выпадает с ошибкой:"не удаётся найти" и путь указывает на диск "С", хотя искомые фалы лежат на "D" Текстовый файл создаёт по правильному пути на "D". подскажите что не так
Возможно у тебя в папке D:\arhiv\ нет rar архивов. Проверь расширение архивов в данном случае оно должно быть .rar, если у тебя дрогой формат архивов, то измени расширение в батнике в строке D:\arhiv\*.rar, например на .zip.
Также проверь, возможно, у тебя есть пробелы в название архивов, если они есть, то замени их, например, на нижнее подчеркивание.
Спасибо..
1-Делает наушники устройством по умолчанию
2-Делает динамики устройством по умолчанию