Bat файл если ошибка

Обновлено: 06.07.2024

При двойном щелчке командного файла Windows ( .bat ), может возникнуть один из следующих симптомов:

  • Пакетный файл открывает окно командной строки, но его команды не выполняются.
  • Блокнот или любой другой текстовый редактор открывает (редактирует) содержимое командного файла.

[Исправлено] .BAT файлы не запускаются при двойном щелчке

Способ 1: использовать исправление реестра ассоциации файлов .BAT

  1. Посетите страницу исправлений сопоставления файлов Windows 10 и загрузите исправление сопоставления файлов .bat. Если вы используете более старую операционную систему, такую ​​как Windows 7 или Windows 8, вы можете найти ссылки на исправления для этих операционных систем ниже на этой странице.
  2. Разархивируйте архив и запустите вложенный файл реестра
  3. Нажмите Да, когда вас попросят подтвердить продолжение
  4. Нажмите ОК.

Важный: Прежде чем продолжить, создайте точку восстановления системы в качестве меры безопасности. Неправильная модификация реестра Windows может вызвать серьезные проблемы.

  1. Запустите редактор реестра ( regedit.exe )
  2. Перейти к следующему ключу:
  3. Установить (default) значение данных для batfile
  4. Перейти к следующему ключу:
  5. На правой панели убедитесь, что (default) значение данных не установлено. Следует читать как value not set , Если вы видите какой-то другой текст, щелкните правой кнопкой мыши (default) оценить и выбрать Delete ,
  6. Затем перейдите к следующему ключу:
  7. Двойной щелчок (default) и установите его значение данных на:
  8. Перейти к следующей ветке:

Значения, представленные в одном из его подразделов ( OpenWithList , OpenWithProgids а также UserChoice ) может быть причиной проблемы.

Способ 3: создайте свой собственный файл REG для автоматизации шагов, перечисленных в способе 2

Если вы хотите автоматизировать шаги, перечисленные в способе 2, используйте этот метод. Разница между Method 1 а также Method 3 это в Method 1 каждая деталь .bat регистрация типов файлов осуществляется. В то время как Method 2 является несколько хирургическим, то есть он проверяет и удаляет только переопределенные записи.

  1. Откройте Блокнот или ваш любимый текстовый редактор.
  2. Скопируйте следующие строки и вставьте его в блокнот
  3. Сохраните файл с любым именем, имеющим .reg расширение, скажем fix_bat.reg
  4. Двойной щелчок fix_bat.reg применить настройки в реестре. Нажмите Да, когда будет предложено подтвердить.

Это оно! Теперь вы исправили настройки связывания пакетных файлов. Пакетные файлы теперь должны выполняться правильно при двойном щелчке.

Чтобы увидеть ошибки в синтаксисе, которые приводят к критическому завершению Batch-файла,
необходимо запустить его из CMD.exe (интерпретатора).

Как?
Этап 1. Подготовка:
Если у Вас в скрипте указана директива для скрытия вывода выполняемых команд:

Она обычно идет первой строкой в коде.
- Удалите ее, или закомментируйте:

иначе будет сложно определить, какая команда вызывает "падение" скрипта или ошибку.

Этап 2. Выполнение скрипта с перенаправлением вывода в файл протокола

Вариант 1. Для систем Windows XP и ниже:

ПУСК -> Выполнить (либо Win + R), вводим CMD, нажимаем

Откроется маленькое черное окно - консоль.
В нем Вы увидите путь к каталогу, в котором будут выполняться команды в данный момент.
Вам нужно перейти в каталог, где расположен бат-файл.
Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,
тогда вводим команды:

(ввод каждой строки подтверждаем клавишей )

После ввода первой строки Вы увидете на экране приглашение вида:
c:\temp>
что свидетельствует об успешном переходе в каталог c:\temp

Вариант 2. Для систем Windows Vista и выше (переход в папку с батником сразу):

1. Перейдите на уровень выше от каталога, где находится Batch-файл
(иными словами: Вам нужно видеть пиктограмму значка папки, в которой находится Batch-файл)
Если Вы видите перед собой сам Batch-файл, достаточно нажать BackSpace (кнопка "стирания").

2. Наведите указатель мыши на папку с Batch-файлом.
Нажмите и удерживайте кнопку "Shift". Вместе с этим нажмите правую кнопку мыши.

3. Выберите пункт "Открыть окно команд".

Comm_Window.jpg

Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,
тогда вводим команду:

Этап 3. Анализ файла-протокола.

После завершения работы Batch-файла в папке C:\temp будет создан файл log.txt
Передайте его специалистам, либо при наличии достаточного опыта проведите анализ самостоятельно.

Этап 4. (опционально)
Если бат-файл содержит цикл или является очень большим, полезным также будет подготовить лог уже с командой @echo off
Добавьте ее в самое начало кода и повторите всю процедуру.

Альтернатива вызову батника из-под интерпретатора.
В самом начале кода пишем:

У меня есть файл .bat, который запускает два файла SQL и перемещает файлы. Мне нужна обработка ошибок в этом .bat файле. Я хочу, чтобы он принял ошибку, сгенерированную в sql, и передал ее в AutoSys. Мне был предоставлен этот код:

Однако мне нужно, чтобы он запускался в файле .bat, а не в Linux?

В настоящее время у меня есть:

Полный .bat файл:

Эквивалент кода выхода $? в пакете - уровень ошибки, доступный через переменную %ERRORLEVEL% . В пакетном сценарии существует специальная форма предложения IF, которая использует уровень ошибки: IF ERRORLEVEL n эквивалентно: "если уровень ошибки больше или равно n'. Как и в bash, значение 0 означает, что предыдущая команда была выполнена без ошибок (не всегда, некоторые команды не устанавливают уровень ошибок). Итак, у вас есть два варианта:

  1. IF %ERRORLEVEL% NEQ 0 что является дословным переводом вашего оператора if в вашем сценарии bash. Имейте в виду, что вам придется использовать версию с отложенным расширением. IF !ERRORLEVEL! NEQ 0 внутри блоков кода, разделенных (. ) (отметьте этот вопрос, который объясняет, почему)
  2. IF ERRORLEVEL 1 что IMHO более подходит (хотя зависит от ваших предпочтений). Также работает внутри (. ) блоки кода, но предполагается, что команды никогда не устанавливают отрицательные уровни ошибок (никогда не встречались, но стоит упомянуть)

Обычно установка переменной с set команда не изменяет уровень ошибки, поэтому вы можете выбрать один из двух вариантов. Но так как у меня сейчас нет компьютера с Windows, чтобы протестировать его, я перестраховываюсь и предлагаю вам первый вариант. Я отредактирую свой ответ, как только протестирую второй вариант.

Последний совет: используйте exit /b вместо exit . exit также выйдет из командной строки в пакетном режиме

РЕДАКТИРОВАТЬ Я тестировал вторую версию, она тоже работает. Таким образом, приведенный выше код можно заменить на:

В этой статье блога довольно хорошо объясняется, почему следует использовать эту версию вместо первой с использованием переменной% ERRORLEVEL%.

Другой вариант, о котором мне любезно напомнил @aschipfl, - это использование операторов условного выполнения. && и || :

  • command1 && command2 выполнит command2 только если command1 удалось
  • command1 || command2 выполнит command2 только если command1 не удалось.

Оба оператора используют код выхода (в большинстве случаев такой же, как уровень ошибки, но не всегда), чтобы определить, завершилась ли команда неудачно или успешно.

Я также видел, что вы разместили свой пакетный файл. Однако есть кое-что, что я хотел бы отметить: goto @ERROR_HANDLING_SQL выдаст ошибку, потому что метки нет @ERROR_HANDLING_SQL . Есть ярлык ERROR_HANDLING_SQL в конце вашего скрипта. Если вы пытались перейти к этой метке, вы должны заменить все вхождения goto @ERROR_HANDLING_SQL с участием goto ERROR_HANDLING_SQL

Все команды и операторы языка являются регистронезависимыми, то есть, команды echo off, ECHO OFF и EcHo oFf являются абсолютно идентичными.

Перенаправление потоков ввода/вывода.

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

Основные команды и операторы пакетных файлов.

@<команда>
Оператор @. позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки. Часто используется следующим образом в начале многих пакетных файлов:
@ECHO OFF
Это позволяет не выводить и саму запрещающую строку ECHO OFF при выполнении пакетных файлов.

GOTO <метка>
Оператор GOTO осуществляет безусловный переход на метку внутри этого же файла. Метка обозначается следующим образом:
:label
то есть, со знаком двоеточия в начале. Для перехода к такой метке будет служить команда
GOTO label
в любом месте BAT-файла.

CALL <имя bat-файла>
Команда CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример:
CALL ABC.BAT
То есть, при выполнении команды CALL выполнение текущего пакетного файла прекратится и управление будет передано пакетному файлу с именем ABC.BAT. При использовании команды CALL ABC.BAT, после завершения работы файла ABC.BAT управление будет возвращено на следующую после команды вызова строку.

PAUSE
Команда PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы. Бывает полезна для того, чтобы дать возможность пользователю прочитать многостраничный текст без использования фильтра MORE.

Используя сочетания этих символов можно изменить вид приглашения DOS по своему вкусу. Не забывайте ставить перед каждым из этих символьв знак доллара.
Если использовать какой-либо текст в строке команды PROMPT, он также будет выведен в соответствующие позиции.

Фильтры в командных файлах.

MORE [диск:][путь]имя_файла MORE < [диск:][путь]имя_файла имя_команды | MORE [диск:][путь][имя_файла]
Последовательный вывод данных по частям размером в один экран. Параметры:

SORT [/R] [/+n] [[диск1:][путь1]имя_файла1] [> [диск2:][путь2]имя_файла2] [команда |] SORT [/R] [/+n] [> [диск2:][путь2]имя_файла2]
Сортировка ввода с выводом результатов в файл, на экран или другое устройство.
Параметры:

Пример:
SORT /R < BOOK1 > REV
Сортирует файл BOOK1 в обратном порядке и записывает результат в файл REV.
Буквы нижнего регистра соответствуют буквам верхнего (a=A, z=Z).

Использование возвращаемых значений.

Основные команды разных версий DOS.

Справочные команды

Читайте также: