Bat проверка наличия файла

Bat проверка наличия файла

Далее кратко описаны полезные возможности, которые можно использовать в командных файлах (*.bat;*.cmd aka батники) операционных систем Windows 2000, XP, 2003 и более поздних.

В этих операционных системах введены существенные расширения возможностей сценариев командной строки, которые позволяют делать, например, следующие вещи:

  • определение для файла полного и короткого пути к нему, имени, расширения, размера, времени модификации
  • выборочная итерация по файлам и каталогам с применением различных команд
  • расширенное перенаправление потоков ввода/вывода
  • использование переменных, вычисление арифметических выражений, манипуляции со подстроками
  • расширенная обработка условий
  • . многое другое

Более подробную помощь нежели в данном обзоре можно найти в стандартной справке в каталоге Windows.
(Типичный путь к файлу справки: C:WINDOWSHelp
tcmds.chm. Если Windows установлена в каталог, отличный от C:WINDOWS, то ссылки на справку из данной страницы работать не будут. Потребуется открыть справку самостоятельно.)
В частности, крайне полезно почитать следующие разделы:

Справку по конкретной команде также всегда можно получить набрав в командной строке " /?".
Например, очень познавательно почитать то, что выдается в результате команд set /?, call /?, for /?, if /?.

Помощь приводится на языке установленной операционной системы.

Вывод
Текущий каталог
Параметры вызова сценариев

Например, после вызова будем иметь следующую картину:

Параметр Значение
%0 d:deltalngscompile_all.cmd
%1 sol.dpr
%2 . (точка)
%3,%4,%5 и т.д. (пусты)
%* sol.dpr .

Современные ОС используют расширенный режим обработки параметров, в котором доступны следующие модификаторы:

Модификатор Описание
расширение %1 и удаление любых кавычек ("")
замена %1 полным путем
замена %1 именем диска
замена %1 путем без диска и имени файла
замена %1 именем файла без расширения
замена %1 расширением имени файла
замена полным путем, содержащим только короткие имена
замена %1 атрибутами файла
замена %1 датой и временем модификации файла
замена %1 размером файла
Поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

Описанные модификаторы можно применять в различных сочетаниях для всех параметров. Например:

Модификатор Описание
полный путь (включая завершающий слэш) к каталогу выполняемого скрипта
имя файла первого параметра с расширением
размер файла второго параметра
замена %1 строкой, аналогичной результату работы программы dir
Проверка условий

Проверка существования файла:
if [not] exist имя_файла команда [else выражение]
Например: if exist $result$.txt del $result$.txt

Проверка кода возврата:
if [not] errorlevel число команда [else выражение]
Условие верно, если предыдущая обработанная команда завершилась с кодом, равным или большим значения число.
Например:

Использование меток

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

Запуск команд

Инструкция "cmd команда" запускает системный пакетный обработчик cmd.exe для выполнения команды команда.
Если вызов происходит из консоли, то используется имеющаяся, если нет — создается новая.
Ключи /c и /k указывают, что по завершении исполнения консоль нужно закрыть или оставить, соответственно.

Инструкция "start команда" запускает обработку команды команда в отдельном параллельном процессе.
Соответствующие ключи позволяют изменять приоритет запускаемого процесса.
Ключ /wait указывает, что запустившему процессу следует дождаться завершения запущенного.

Запускать новые командные сценарии из командных сценариев можно также двумя способами.
Первый: Второй:

Код возврата команд

Команда exit число прерывает исполнение текущего сценария с возвратом запустившему его процессу заданного кода выхода. По умолчанию производится прерывание сразу всей цепочки вызовов пакетных сценариев. Если необходимо завершить только текущий сценарий и возвратить управление в сценарий, вызвавший его командой call, то нужно использовать ключ /b команды exit. Для выхода из сценария с передачей вызвавшему процессу текущего значения %errorlevel% необходимо использовать команду goto :eof.

Некоторые команды всегда устанавливают переменную %errorlevel%, некоторые модифицируют ее только при возникновении ошибок, а некоторые вообще ее никогда не меняют.
Вот пример:

Копирование

Проверить, удачно ли выполнилась команда можно по коду возврата %errorlevel%.

Использование нескольких команд и символов условной обработки

Можно выполнять несколько команд из одной командной строчки с помощью символов условной обработки, перечисленных в следующей таблице.

Символ Синтаксис Определение
& [. ] команда1 & команда2 Выполняется первая команда, затем вторая команда.
&& [. ] команда1 && команда2 Вторая команда выполняется, только если первая была выполнена успешно.
|| [. ] команда1 || команда2 Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
( ) [. ] ( команда1 & команда2 ) Используется для группировки или вложения команд.
; или , команда1 параметр1 ; параметр2 Используется для разделения параметров команды.
Читайте также:  Польская ветка танков в world of tanks

Примечание:
Амперсанд &, вертикальная черта | и скобки () являются специальными символами, которым должен предшествовать управляющий символ ^ или кавычки, если эти символы передаются в качестве аргументов.

Вот пример специализированного скрипта для сравнения файлов:

Использование переменных среды

Глобальные переменные устанавливаются в свойствах операционной системы или специальной внешней утилитой setx и доступны с одними и теми же значениями при запуске всех пакетных файлов.

Локальные переменные устанавливаются и используются по-своему в каждом отдельном сценарии, сохраняются только во время его выполнения, а также передаются в дочерние сценарии при вложенных вызовах.

Псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.

В следующей таблице приведен выборочный список наиболее интересных переменных среды.

Переменная Тип Описание
Локальная Возвращает путь к текущей папке.
Системная Возвращает имя компьютера.
Системная Возвращает текущую дату. Использует тот же формат, что и команда date /t .
Системная Возвращает код ошибки последней использовавшейся команды.
Системная Указывает путь поиска для исполняемых файлов.
Системная Возвращает произвольное десятичное число от 0 до 32767.
Системная Возвращает размещение системного каталога Windows.
и Системная и пользовательская Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
Системная Возвращает текущее время. Использует тот же формат, что и команда time /t .
Локальная Возвращает имя пользователя, выполнившего вход в систему.

При использовании переменных можно также использовать выделение подстрок.

Конструкция Назначение
%PATH:

10,5%

расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины. %PATH:

-10%

извлечет последние 10 символов переменной PATH %PATH:

0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних

Для установки значений переменных используется команда set.
Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда

Вычисление арифметических выражений

В следующей таблице представлены арифметические операторы, поддерживающие параметр /a , в порядке убывания приоритета.

Оператор Действие оператора
() группировка
!

унарные операторы * / % арифметические операторы + — арифметические операторы > двоичный сдвиг & двоичное И ^ двоичное исключающее ИЛИ | двоичное ИЛИ присваивание , разделитель операторов

При использовании символов & | % ^ заключайте выражение в кавычки.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.

Пример использования вычисления выражений:

Потоки ввода/вывода

Потоки используются в командных сценариях для унифицированного распределения и перенаправления ввода/вывода.

В следующей таблице представлены стандартные потоки.

Поток Номер дескриптора Описание
STDIN Стандартный ввод (только чтение)
STDOUT 1 Стандартный вывод (только запись)
STDERR 2 Вывод ошибок (только запись)

Каждый поток может быть связан с каким-либо устройством ввода/вывода.

В следующей таблице представлены стандартные устройства.

Устройство Описание
CON Консоль (чтение с клавиатуры и вывод на экран)
NUL Пустота
PRN Принтер

В качестве устройств могут также выступать файлы, заданные по имени.
По умолчанию все стандартные потоки связаны с устройством CON.

В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.

Оператор перенаправления Описание
> Перенаправление вывода с затиранием.
Перенаправление ввода.
>> Перенаправление вывода с добавлением.
>& Считывает данные на выходе одного потока как входные данные для другого потока.
Считывает входные данные одного потока как выходные данные другого потока.
| Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием "канал".

Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.

Читайте также:  Материнская плата asus maximus viii gene характеристики

Далее приведены некоторые примеры.

Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).

Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.

Дописывание содержимого одного файла в конец другого.

Поэкранный вывод списка элементов текущего каталога.

Поэкранный вывод имен всех фидошников города Гомеля, отсортированных по алфавиту.

Организация циклов

Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:

Параметры: < % переменная | %% переменная >Обязательный параметр. Замещаемый параметр. Используйте % переменная для выполнения команды for из командной строки. В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I). ( множество ) Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными. команда Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр ( множество ) . ПараметрыКоманднойСтроки Задает параметры командной строки, которые используются с указанной командой.
Подробнее команда описана в справке. Здесь приведены несколько примеров, иллюстрирующих ее возможности.

Перебор фиксированного множества параметров.

Итерация по файлам.

Итерация по каталогам.

Итерация и разбор файлов

Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр "options" служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:

Описание
eol=c Задает символ конца строки (только один символ).
skip=n Задает число строк, пропускаемых в начале файла.
delims=xxx Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.
Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма m-n задает диапазон, указывающий элементы с m -го по n -ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.
usebackq Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов . Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Поясняющий пример:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j — для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.

Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.

Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.

Еще один пример:

Организация блокировок
Установка цвета консоли

(CopyLeft) Vadim Kopichenko

Я должен создать .BAT файл, который делает это:

  1. Если C:myprogramsyncdata.handler существует, выход;
  2. Если C:myprogramhtmldata.sql не существует, выход;
  3. В C:myprogramsync удалить все файлы и папки кроме (test, test3 и test2)
  4. Копия C:myprogramhtmldata.sql к C:myprogramsync
  5. Вызвать другой пакетный файл с параметром sync.bat myprogram.ini.
Читайте также:  Как удалить предопределенный элемент справочника в 1с

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

(Пока оценок нет)

А) Сравнение двух строк

Заметим, что для сравнения строк здесь используется двойной знак равенства "= =".

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

Пример 5. Составим файл iftren.bat, который получает в качестве входного параметра либо символ "K", либо "P", и в зависимости от этого запускает соответствующую программу.

if ‘%1’= =’K’ F:WORKKEYTRENTRK

if #%1#= =## echo ФОРМАТ: iftren K (или iftren P)

Вместо замещаемого параметра %1 подставляется либо "K", либо "P", либо пустая строка, если мы запустили BAT-файл без параметров. Первый IF проверяет, был ли параметр "K", и если да, то запускает программу «Клавиатурный тренажер». Второй IF проделывает то же самое для параметра "P" и программы TURBO. Третий IF проверяет, не был ли запущен BAT-файл без параметров, и если да, то выдает справку о правильном формате.

Задание. Создайте файл ifdir.bat, который бы в зависимости от введенного параметра командной строки ("S", "P" или "W") вызывал бы команду DIR с соответствующим параметром, а при отсутствии параметров выдавал бы напоминание о формате команды.

Команда IF часто используется вместе с GOTO.

Пример 6. Изменим файл iftren.bat из Примера 5, так чтобы перед запуском программы очищался экран и выводилось соответствующее сообщение:

if *%1*= =** echo ФОРМАТ: iftren K (или iftren P)

echo Загружаю TURBO PASCAL.

echo Загружаю программу TRK.

Задание. Создайте файл iftren.bat из Примера 6 и проверьте три варианта выполнения этого командного файла.

б) Проверка существования файла на диске.

ФОРМАТ: IF [NOT] EXIST [ ][ ]

Этот вариант команды IF проверяет, имеется ли на диске файл с заданным именем и если да, то выполняется .

Пример 7. Составим файл ifexist.bat, который получает в качестве входного параметра имя файла, и если такой файл уже существует, то копирует его в файл с тем же именем, а расширением $$$. Если файл не существует, то выдается сообщение об этом:

if exist %1 goto yes

echo Такой файл не существует!

Задание. Создайте файл ifexist.bat из Примера 7 и проверьте два варианта выполнения этого командного файла.

8. Циклическая подстановка

В языке BAT-файлов нет полноценной команды для определения циклов. Однако, есть команда для циклического выполнения определенной команды для всех файлов из указанного множества.

ФОРМАТ: FOR %% IN ( ) DO

Параметр — это любая допустимая команда DOS. В параметре могут быть использованы любые имена (имена файлов или символьные строки), разделенные знаком пробела. Локальный аргумент может состоять только из одной латинской буквы. Имена из последовательно присваиваются локальному аргументу.

Примеры правильных заданий :

(A B C D E F G H I J)

Пример 8. Последовательный вывод на экран содержимого всех TXT-файлов текущей директории.

for %%f in (*.txt) do type %%f

В команду type %%f вместо %%f поочередно подставляются имена всех TXT-файлов текущего каталога.

Пример 9. Файл ABFG.bat позволяет создать четыре каталога: CAT-A, CAT-B, CAT-F, CAT-G, а также скопировать в них файлы, которые начинаются соответственно с A, B, F, G.

for %%c in (A B F G) do md cat-%%c

for %%f in (A*.*) do copy %%f cat-A

for %%f in (b*.*) do copy %%f cat-b

for %%f in (f*.*) do copy %%f cat-f

for %%f in (g*.*) do copy %%f cat-g

Задание. Создайте командный файл ABFG.bat и проверьте его работу.

Составьте другой командный файл, с помощью которого можно удалить все каталоги, созданные файлом ABFG.bat.

9. Вызов BAT-файла из другого BAT-файла

Из тела одного BAT-файла можно вызвать другой. Это может потребоваться, например, если нужно в команде циклической подстановки выполнить не одну, а несколько команд. Существует два способа вызова одного командного файла из другого.

а) В командном файле пишется имя вызываемого BAT-файла (с параметрами, если они есть). При этом управление передается в вызываемый BAT-файл и после достижения его конца НЕ возвращается в главный BAT-файл. Чтобы такой возврат произошел, нужно

б) Вызывать BAT-файл с помощью команды CALL:

Задание. Создайте BAT-файл с вызовом другого BAT-файла. Сначала используйте вариант вызова без, а затем с использованием команды CALL.

Ссылка на основную публикацию
Adblock detector