Бат файл ошибка

Error Handling in Batch Script

Every scripting and programming language contains an error handler like Java contains try-catch for error handling. In a Batch script, there is no direct way to do this, but we can create an error handler in the Batch script using a built-in variable of the Batch script name %ERRORLEVEL%.

This article will show how we can create a Batch script to handle errors and failures. Also, we are going to some examples that make the topic easier.

Error Handling in Batch Script

When a command successfully executes, it always returns an EXIT CODE that indicates whether the command successfully executed or failed to execute. So, to create an error handling in a Batch file, we can use that EXIT CODE in our program.

You can follow below general format to create an error handler:

@Echo off
SomeCommand && (
  ECHO Message for Success
) || (
  ECHO Message for Failure or Error
)

We can also do that by checking the variable named %ERRORLEVEL%. If the variable contains a value not equal to 0, then there might be a problem or error when executing the command. To test the %ERRORLEVEL% variable, you can follow the below example codes:

@ECHO off
Some Command Here !!!
IF %ERRORLEVEL% NEQ 0 (Echo Error found when running the command &Exit /b 1)

You must note that the keyword NEQ means Not Equal. And the variable %ERRORLEVEL% will only contain a non-zero value if there is a problem or error in the code.

An Example That Contains Errors

Below, we shared an example. We will run a Batch file named Your_file.bat from a location.

We intentionally removed that file from the directory. So it’s an error command.

The code for our example will be:

@echo off
ECHO Running a Batch file
CD G:\BATCH\
CALL Your_file.bat
IF  errorlevel 1 GOTO ERROR
ECHO The file run successfully.
GOTO EOF

:ERROR
ECHO The file didn't run successfully.
CMD /k
EXIT /b 1

:EOF

Now, as the file doesn’t exist in the directory, it will show an error, and you will get the below output when you run the code shared above.

Output:

Running a Batch file
The system cannot find the path specified.
'Your_file.bat' is not recognized as an internal or external command,
operable program or batch file.
The file didn't run successfully.

An Error-Free Code Example That Runs Successfully

In the example above, we made a mistake on the code intentionally to understand how the code works. If we correct it like below:

@echo off
ECHO Running a Batch file
CALL "G:\BATCH\Yourfile.bat"
IF  errorlevel 1 GOTO ERROR
ECHO The file runs successfully.
GOTO EOF

:ERROR
ECHO The file didn't run successfully.
CMD /k
EXIT /b 1

:EOF

Then we will get an output like this:

Running a Batch file
This is from the first file
The file runs successfully.

Remember, all commands we discussed here are only for the Windows Command Prompt or CMD environment.

I have a batch file that runs a couple executables, and I want it to exit on success, but stop if the exit code <> 0. How do I do this?

asked Aug 10, 2010 at 18:12

Dlongnecker's user avatar

Sounds like you’ll want the «If Errorlevel» command. Assuming your executable returns a non-0 exit code on failure, you do something like:

myProgram.exe
if errorlevel 1 goto somethingbad
echo Success!
exit
:somethingbad
echo Something Bad Happened.

Errorlevel checking is done as a greater-or-equal check, so any non-0 exit value will trigger the jump. Therefore, if you need to check for more than one specific exit value, you should check for the highest one first.

answered Aug 10, 2010 at 18:20

Hellion's user avatar

HellionHellion

1,74028 silver badges36 bronze badges

5

You can also use conditional processing symbols to do a simple success/failure check. For example:

myProgram.exe && echo Done!

would print Done! only if myProgram.exe returned with error level 0.

myProgram.exe || PAUSE

would cause the batch file to pause if myProgram.exe returns a non-zero error level.

answered Aug 11, 2010 at 5:55

Cheran Shunmugavel's user avatar

4

A solution better than Hellion’s answer is checking the %ERRORLEVEL% environment variable:

IF %ERRORLEVEL% NEQ 0 (
  REM do something here to address the error
)

It executes the IF body, if the return code is anything other than zero, not just values greater than zero.

The command IF ERRORLEVEL 1 ... misses the negative return values. Some progrmas may also use negative values to indicate error.

BTW, I love Cheran’s answer (using && and || operators), and recommend that to all.

For more information about the topic, read this article

answered Sep 24, 2019 at 11:47

Moha Dehghan's user avatar

Moha DehghanMoha Dehghan

17.9k3 gold badges55 silver badges72 bronze badges


Загрузить PDF


Загрузить PDF

Вирусы-шутки — это несложные программы, которые можно подсунуть другу (или врагу), и тот будет думать, что его компьютер взломан, поражен вирусом или серьезно поврежден. Вирусы-шутки можно писать в обычном Блокноте: нужно лишь записать в файл команды, которые замедляют работу компьютера, выводят из строя работу операционной системы или просто пугают пользователя, а затем заставить его запустить этот файл. Вирусы-шутки могут быть чем угодно, начиная от надоедливой неприятности и заканчивая кошмаром, нарушающим работу системы. «Вирусы» из этой статьи предназначены только для безобидных шуток, самое худшее, что они могут сделать, — это выключить компьютер. Внимание: эти вирусы-шутки предназначены только для компьютеров под управлением Windows, они не будут работать на Mac OS без специальной подготовки. Начнем с шага 1.

  1. 1

    Запустите Блокнот. Пакетные (.BAT) файлы содержат команды для компьютера в текстовом виде. Для того, чтобы написать BAT-файл, не нужен специальный редактор — достаточно Блокнота из стандартного набора программ Windows. Блокнот можно найти в меню «Пуск» или в подменю «Стандартные». Открыть Блокнот можно также, нажав сочетание клавиш Win+R, в текстовом поле появившегося диалогового окна набрать «notepad» и нажать Enter.

  2. 2

    Наберите «@echo off», а затем, с новой строки, «CLS». По умолчанию BAT-файлы открывают окно командной строки и выводят исполняемые команды. Команды «@echo off» и «CLS» предотвращают появление команд в окне командной строки, делая причину шутки невидимой для «жертвы».

  3. 3

    Напишите команды для открытия множества (или бесконечного количества) окон. Теперь наступило время написать последовательность команд, исполняя которые, ваш поддельный вирус откроет много окон разных программ один раз или будет отрывать эти окна бесконечно. Важно знать, если бесконечно открывается очень много окон, компьютер в конце концов может зависнуть. Читайте далее о том, как сделать оба вида «вируса»:

    • Чтобы открыть определенное количество окон, с новой строки наберите в Блокноте следующую команду: start (название программы). Вместо фразы в скобках введите название программы на компьютере «жертвы» или или полное имя исполняемого файла. Эта команда дает инструкцию компьютеру открывать окно указанной программы. Например, start iexplore.exe откроет окно Internet Explorer. Повторите команду «start» столько раз, сколько захотите, и ваш «вирус» откроет окно столько раз, сколько вы укажете. Вот несколько программ которые можно ввести после команды «start»:
      • iexplore.exe — браузер Interent Explorer
      • calc.exe — Калькулятор
      • notepad.exe — Блокнот
      • winword.exe — Microsoft Word
    • Чтобы открыть бесконечное количество окон, сначала с новой строки наберите :A, включая двоеточие. На следующей строке наберите start iexplore.exe (или другую программу). И, наконец, строкой ниже наберите goto A. Эта последовательность команд заставит компьютер открывать окно Internet Explorer (или любой другой программы), возвращаться к месту непосредственно перед открытием окна, а затем сразу же открывать новое окно, пока окно командной строки не будет закрыто или компьютер не зависнет.
  4. 4

    Напишите в «вирусе» сообщение. Для устрашающего эффекта можно добавить в «вирус» сообщение, которое заставит пользователя думать, что с его компьютером что-то не так. Чтобы отобразить сообщение, начните новую строку и наберите echo Ваше сообщение. Затем с новой строки наберите pause. Команда «pause» остановит выполнение «вируса» после появления сообщения.

    • Чтобы ваша шутка была правдоподобной, напишите сообщение, похожее на настоящие сообщения об ошибках, например: Фатальная ошибка. C:// каталог поврежден.
  5. 5

    Сохраните текст как пакетный файл. Когда закончите, в меню Блокнота выберите Файл > Сохранить как…, а затем укажите расширение файла «.bat» (например, «pinball.bat»). В выпадающем списке «Тип файла» выберите «Все файлы». Сохраните файл где нибудь на компьютере «жертвы».

  6. 6

    Заставьте пользователя открыть файл. Чтобы ваша шутка сработала, нужно сделать так, чтобы «жертва» запустила ее. Этого можно добиться разными способами. Один из самых работающих — создать ярлык для своего пакетного файла и изменить его иконку на что-то, чем пользователь действительно пользуется, а затем изменить название ярлыка, чтобы оно соответствовало иконке. Откиньтесь на спинку кресла и наблюдайте за результатами из удобного места!

    Реклама

  1. 1

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

  2. 2

    Наберите «x=msgbox(«Текст сообщения», 5+16, «Заголовок сообщения») точно так, как здесь указано, включая скобки и кавычки, и замените «Текст сообщения» и «Заголовок сообщения» желаемым текстом. Эта команда открывает стандартное диалоговое окно ошибки Windows с указанными вами сообщением об ошибке и заголовком окна. Чтобы ваша шутка была правдоподобной, используйте сообщения и заголовки, похожие на настоящие. Например попробуйте в качестве заголовка «Ошибка терминала», а в качестве сообщения — «В каталоге C://Users/Windows/system32 обнаружена критическая неисправность».

    • Возможно, вам захочется развить свою шутку в направлении взлома. В таком случае используйте сообщения вроде: «Я имею полный доступ к вашей системе. Приготовьтесь ко взлому». На самом деле ничего такого не случится, так что это сработает только с людьми, которые плохо разбираются в компьютерах.
    • Выражение «5+16» указывает компьютеру создать диалоговое окно с иконкой критической ошибки и двумя кнопками «Повтор» и «Отмена». Изменяя эти числа, можно получить разные типы окон с ошибками. Просто подставьте из приведенных ниже чисел любое число из одной цифры вместо 5 и любое число из двух цифр вместо 16:
      • 0 (Кнопка OK)
      • 1 (Кнопки OK и Отмена)
      • 2 (Кнопки Отмена, Повтор и Пропустить)
      • 3 (Кнопки Да, Нет, и Отмена)
      • 4 (Кнопки Да и Нет)
      • 5 (Кнопки Повтор и Отмена)
      • 16 (Иконка критической ошибки)
      • 32 (Иконка помощи)
      • 48 (Иконка предупреждения)
      • 64 (Иконка информации)
  3. 3

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

  4. 4

    Сохраните документ как файл Visual Basic (VBA). Когда вы введете все желаемые сообщения, сохраните файл. В меню Блокнота выберите Файл > Сохранить как…, дайте своему файлу имя с расширением «.vba». Обязательно выберите «Все файлы» из выпадающего списка «Тип файла». Теперь, чтобы шутка удалась, нужно заставить «жертву» запустить этот файл, например используя трюк из метода 1.

    Реклама

  1. 1

    Запустите Блокнот. Это шутка использует команды из Блокнота, чтобы заставить компьютер открывать программы случайным образом до тех пор, пока пакетный файл не будет отключен или компьютер не зависнет. Чтобы сделать эту шутку, вам просто нужно скопировать и вставить команды, указанные в этом разделе. Однако заметьте, что это сработает не на всех компьютерах.

  2. 2

    Скопируйте и вставьте следующие команды:@echo offclsbegingoto %random%:1start cmd.exegoto begin:2start mspaint.exegoto begin:3start pinball.exegoto begin:4start iexplore.exegoto begin:5start explorer.exegoto begin:6start solitaire.exegoto begin:7start explorer.exegoto begin:8start edit.exegoto begin:9start iexplore.exegoto begin:0start mspaint.exegoto begin

  3. 3

    Изменяйте эти команды на свое усмотрение. Этот код случайным образом бесконечно открывает программы, указанные после слова «start». Возможно, вы заметили, что некоторые программы повторяются. Изменяйте список программ, как вы того пожелаете.

    • Заметьте, что некоторые названия программ, перечисленных выше, могут быть неправильными для некоторых машин, например на некоторых компьютерах может не быть «pinball.exe». Следует проверить дважды правильность названий программ, перед тем как перемещать вирус-шутку на компьютер «жертвы».
    • Если вы сомневаетесь в названии какой-то программы, помните, что точный путь программы тоже подходит. Например, вместо «iexplore.exe» можно написать «C:\Program Files\Internet Explorer».
  4. 4

    Сохраните текст как пакетный файл и запустите его (если отважитесь). Сохраните файл с расширением «.bat», выбрав «Все файлы» из выпадающего списка «Тип файла». Когда вам удастся заставить пользователя запустить его, он начнет случайным образом без остановки открывать программы в компьютере.

    • Чтобы было веселей, попробуйте заменить в одной из команд ‘*.exe’ на полный путь к какому-либо документу пользователя. Например, ‘start C:\Документы\123.doc’ откроет документ 123.doc из папки «Документы» в редакторе по умолчанию, а
      edit (полное имя файла)
      goto begin
      откроет указанный файл в текстовом редакторе DOS. Это будет выглядеть так, как будто хакер читает личные документы. Помните, что имя файла, содержащее пробелы, должно заключаться в кавычки!
  5. 5

    Изучите значения команд, чтобы модифицировать свои шутки. Даже если вы не понимаете, как они работают, вирусы-шутки могут быть хорошим развлечением. Но вам будет еще веселей, если вы будете понимать, что происходит при их запуске, и когда вы разберетесь, как работают эти «вирусы», вы сможете писать свои собственные! Вот список команд, используемых в этой статье, а также их краткое описание:

    • @echo off — отключить вывод команд.
    • cls — очистить экран командной строки. Командная строка будет выглядеть аккуратней.
    • goto A — перейти на метку А.
    • %random% — переменная Windows, генерирующая случайные числа от 0 до 9 (включительно).
    •  :(число, буква или слово) — метка. На нее можно переходить с помощью команды «goto».
    • На заметку: в примере выше у нас 10 меток. Если мы пропустим одно число, программа закроется, если %random% сгенерирует это число.

    Реклама

Советы

  • Вот образец одной из самых надоедливых программ и ее код:

    @echo off
    :a
    start notepad
    goto a

    Все, что она делает — открывает Блокнот бесконечное количество раз до тех пор, пока пользователь не закроет окно командной строки. Не запускайте ее на компьютере без присмотра — это может плохо закончиться.

    Это упрощенный вариант метода 1, рассмотренного выше.

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

Реклама

Предупреждения

  • У вас могут быть проблемы с использованием вредоносных пакетных файлов или порчей школьных или общественных компьютеров. Непредусмотренная отправка таких файлов через интернет или запись их в общественные системы запрещена.
  • Не перестарайтесь. 10 копий чего-то вроде Пинбола очень раздражают. Сотни копий могут привести к зависанию компьютера и лишить кое-кого работы.

Реклама

Что вам понадобится

  • Компьютер с ОС Windows
  • Блокнот
  • Любое программируемое приложение

Об этой статье

Эту страницу просматривали 589 639 раз.

Была ли эта статья полезной?

Провел небольшой тест.

Развернуть код

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@echo off
Setlocal EnableDelayedExpansion
set flash=f:
set videofile=Cougar.Town.S01E01.rus.LostFilm.TV.avi
 
Echo Тест успешного копирования
copy nul nul
echo errorlevel %errorlevel%
Echo Тест копирования в защищенную правами папку
cmd /c copy c:\test.log c:\Windows\kmsem\1.log
echo errorlevel %errorlevel%
Echo Тест копирования несуществующего файла
cmd /c copy abracadabra L:\*.*
echo errorlevel %errorlevel%
verify off
if exist %flash%\%videofile% (
  del %flash%\%videofile%& ping 127.1>nul
)
Echo Тест копирования через XCOPY прав доступа ACL без административных привилегий
XCOPY /O i:\%videofile% %flash%\
echo errorlevel %errorlevel%
echo.
Echo Тест копирования видеофайла (268 MB) на флеш
Set STime=%time%
copy i:\%videofile% %flash%\
echo errorlevel %errorlevel%
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
del %flash%\%videofile%
ping 4 127.1>nul
Set STime=%time%
Echo Тест копирования видеофайла (268 MB) на флеш с верификацией записи
copy /v i:\%videofile% %flash%\
echo errorlevel %errorlevel%
Set ETime=%time%
Call :TimeElapsed "%STime%" "%ETime%" ret
Echo Прошло: %ret% с.
pause
goto :eof
 
 
:TimeElapsed %1-StartTime %2-EndTime %3-var_result
Call :TimeToMSec "%~1" TimeS_ms
Call :TimeToMSec "%~2" TimeE_ms
Set /A diff=TimeE_ms-TimeS_ms
Set /A diffSS=diff/100
Set /A diffms=%diff% %% 100
Set %3=%diffSS%,%diffms%
Exit /B
 
:TimeToMSec %1-Time 2-var_mSec
For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
  Set /A HH=%%A
  Set MM=1%%B& Set /A MM=!MM!-100
  Set SS=1%%C& Set /A SS=!SS!-100
  Set mS=1%%D& Set /A mS=!mS!-100
)
Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B

Один раз получил странную ошибку. Copy скопировала файл, после чего написала, что «я такого имени не знаю…» =)) Error 9009

По итогам +Errorlevel:

xcopy

Код

Описание

0 Успешное завершение/Program suseccfully completed.
4 Файл не найден/The system cannot find the file specified.
4 Доступ запрещён/Access is denied. Нет прав доступа к ресурсу.
4 Невозможно скопировать файл поверх самого себя/The file cannot be copied onto itself

errorlevel = 0, даже, если пользователь ответил «Не заменять файл».

Также видим, что в случаях с защищенной правами папкой или когда файл не существует
мы получаем Errorlevel 1 (а не ожидаемые дефолтовые 5 и 2 соответственно).

copy

Код

Описание

0 Успешное завершение/Program suseccfully completed.
1 Файл не найден/The system cannot find the file specified.
1 Доступ запрещён/Access is denied. Нет прав доступа к ресурсу.
1 Невозможно скопировать файл поверх самого себя/The file cannot be copied onto itself

errorlevel = 0, даже если пользователь ответил «Не заменять файл»
Чтобы консоль задала этот вопрос:
1) для одиночного файла нужно указать ключ /-y

2) для маски файлов работает по-умолчанию. Обратная операция — «принудительная замена»: ключ /y

Сравнение copy с verify off
1) без ключа
2) с ключем /v
показало, что в большинстве случаев с верификацией для копирования файла в ~250 МБ затрачивается на ~1,5 сек. больше времени. Не знаю, что именно оно проверяет, но уж файл точно целиком не считывается.

Как сделать обработку исключений в CMD?
В python например так:

try:
  ... 
  print("Ошибок нет! ") 
except:
  print("Ошибка!")


  • Вопрос задан

  • 617 просмотров

КОМАНДА1 && КОМАНДА2
— вторая команда выполняется, если первая завершилась без ошибок.
КОМАНДА1 || КОМАНДА2
— вторая команда выполняется, если первая завершилась с ошибкой.

КОМАНДА && echo Ошибок нет! || echo Ошибка!

(Для объединения нескольких команд в составную можно использовать скобки, переносы строк или знак & между командами в одной строке. Для размещения одной простой команды на нескольких строках можно использовать ^ в конце переносимой строки…)

Пригласить эксперта


  • Показать ещё
    Загружается…

21 сент. 2023, в 22:51

450 руб./за проект

21 сент. 2023, в 22:23

5000 руб./за проект

21 сент. 2023, в 20:54

10000 руб./за проект

Минуточку внимания

Понравилась статья? Поделить с друзьями:
  • Басня сергея михалкова ошибка
  • Басня ошибка михалкова читать
  • Басня михалкова ошибка текст
  • Басня михалкова ошибка анализ
  • Басни соловья не кормят тип ошибки