Exit b что это значит
Разница между «|| exit / b »и« || exit / b! errorlevel! »
Сегодня я исследовал задание сборки, которое, очевидно, провалилось, если вы посмотрели журнал ошибок, но которое было отмечено как успешное. После долгих экспериментов я обнаружил, что этот шаблон не всегда работает должным образом:
Я прочитал вопрос SO Вариант пакетного выхода Windows b с помощью или без уровня ошибок и приведенное ниже заявление из https://www.robvanderwoude.com/exit.php, но до сих пор не могу объяснить, что я наблюдаю.
Интерактивная справка DOS (HELP EXIT) не дает понять, что параметр / B выходит из текущего экземпляра скрипта, что не обязательно совпадает с выходом из текущего скрипта. Т.е. если сценарий находится в ВЫЗВАННОЙ части кода, EXIT / B завершает ВЫЗОВ, а не сценарий.
Это минимальный пакетный файл, который я использовал для изучения этого:
И вот как я вызвал командный файл (чтобы имитировать, как он был вызван бегуном на основе GitLab PowerShell):
Вот результат, зависящий от того, какая из двух строк в командном файле выполняется:
Есть еще один способ добиться правильного поведения, который состоит в том, чтобы вызвать пакетный файл от руки из PowerShell, используя также CALL :
ОБНОВЛЕНИЕ: Спасибо за все обсуждения, но я чувствую, что они теряются в сорняках, что, вероятно, является моей ошибкой в том, что я был слишком расплывчатым в моем первоначальном вопросе. Я думаю, что на самом деле мне нужно (если возможно) окончательное утверждение о том, когда errorlevel (предположительно) оценивается в следующем утверждении:
Действительно ли он оценивается раньше (то есть до запуска program ) следующим образом:
Или он оценивается лениво (т.е. когда exit выполняется после того, как program был запущен и внутренне errorlevel был обновлен), более аналогично этому:
Следовательно, я на самом деле не гонюсь за спекуляциями, если, к сожалению, это лучшее, что мы можем сделать, и в этом случае, зная, что нет окончательного ответа или что это ошибка, является приемлемым ответом для меня: o).
4 ответа
Кстати, call echo %^ErrorLevel% просто позволяет нам не использовать отложенное расширение.
Устранение нерелевантных сложностей вызова PowerShell и Cmd.exe, чтобы мы могли увидеть, как работает интерпретатор cmd:
Я провел еще один быстрый тест вышеуказанного скрипта и интерактивно проверил уровень ошибки из окна консоли после выхода из скрипта:
Давайте посмотрим на три возможных сценария:
test1.bat
test2.bat
Тестирование с помощью test-all.bat :
Как автоматически закрыть окно cmd после выполнения пакетного файла?
Я запускаю пакетный файл с двумя строками:
Этот командный файл используется для запуска приложения Xming, а затем для приложения PuTTY, чтобы я мог использовать SSH в моей университетской компьютерной лаборатории.
Однако, если я запустил это, и Xming еще не открыт, как только я выйду из терминала PuTTY, окно cmd останется открытым. Только если я уже запустил Xming, окно cmd закрывается, когда я закрываю терминал PuTTY. Я попытался добавить exit в последнюю строку командного файла, но безрезультатно.
ОТВЕТЫ
Ответ 1
Измените командный файл на START обе программы, а не START ввод одного и CALL другого
Если вы запустите его таким образом, после запуска программы CMD-окно не останется открытым.
Ответ 2
* Если вы хотите убедиться, что файл запущен, и для закрытия окна DOS через 2 секунды вы можете добавить строки:
РЕШЕНИЕ: Например, там есть небольшой бесплатный прогейм под названием BgInfo, который отобразит всю информацию о вашем компьютере. Предположим, что это в каталоге C:\BgInfo. Чтобы запустить его из пакетного файла с помощью переключателя «/popup». И для того, чтобы окно DOS закрывалось после этого, пока оно все еще выполняется, используйте:
Ответ 3
Ответ 4
Добавьте этот код в конце кода выполнения
Ответ 5
Ответ 6
Если вы хотите разделить команды на одну команду на файл, вы можете сделать
а в другом файле вы можете сделать
Команда cmd/c закроет окно командной строки после запуска exe.
Ответ 7
У меня та же проблема с разными вызовами в командном файле. У меня есть командный файл, который содержит следующие строки:
начать/подождать abaqus cae noGUI = «c:\temp\Code1.py» cmd/c EXIT 0
Этот пакетный файл вызывается из кода Фортрана. После вызова он открывает командное окно и запускает Code1.py. Поскольку он не закрывает командное окно, код Fortran, который вызвал этот командный файл, приостанавливает операцию, пока я не закрою командное окно вручную. Я был бы очень признателен, если бы кто-нибудь мог мне помочь с этим.
Ответ 8
i.e.: contents.bat читает
Это также выглядит лучше, если я изменяю значки файла bat только для этих элементов в соответствии с контекстом, в котором они находятся, но это другое дело, скрывая файлы bat во вложенной папке и создавая специальные ярлыки для них в корневой папке с изображениями, вызываемыми для настройки, также скрытыми.
Команды bat-файлов. Как создать bat-файл? Базовые команды
Bat-файлы Windows являются удобным способом выполнения различных задач на ПК, которым активно пользуются компьютерные умельцы. Они позволяют автоматизировать повседневные задачи, сократить время их выполнения и превратить сложный процесс во что-то посильное рядовому пользователю. В данной статье представлены базовые возможности командных файлов и рекомендации по самостоятельному их написанию.
Автоматизация – это просто
Как создать bat-файл? Для этого нужно выполнить следующие действия:
Необработанный файл будет выглядеть примерно так:
title Это ваш первый скрипт bat-файла!
echo Добро пожаловать в сценарий пакетной обработки!
Более подробно о командах bat-файлов и их использовании речь пойдет ниже.
Шаг 1: создание программного скрипта
Предположим, что у пользователя часто возникают проблемы с Сетью. Он постоянно пользуется командной строкой, набирая ipconfig и пингуя Google для устранения неполадок в Сети. Через некоторое время пользователь понимает, что было бы намного эффективнее, если бы он написал простой bat-файл, записал его на свой USB-накопитель и запускал его на компьютерах, которые он диагностирует.
Создание нового текстового документа
Пакетный файл упрощает выполнение на компьютере повторяющихся задач с помощью командной строки Windows. Ниже приведен пример скрипта, отвечающего за отображение на экране некоторого текста. Перед тем как создать bat-файл, следует щелкнуть правой кнопкой мыши на пустом месте в каталоге и выбрать пункт «Создать», а затем «Текстовый документ».
Добавление кода
Двойной щелчок на этом новом текстовом документе откроет принятый по умолчанию текстовый редактор. Можно скопировать и вставить приведенный выше пример кода в текстовую запись.
Сохранение
Но экране появится надпись:
«Добро пожаловать в сценарий пакетной обработки! Для продолжения нажмите любую клавишу. «
В случае если bat-файл не запускается, пользователи рекомендуют зайти в регистр и удалить ключ:
Не стоит думать, что это все, на что способны сценарии пакетной обработки. Параметрами скриптов являются измененные версии команд командной строки, поэтому пользователь ограничен только их возможностями. А они довольно обширные.
Шаг 2: знакомство с некоторыми командами
Если пользователь ПК знаком с тем, как следует выполнять команды консоли DOS, то он будет мастером создания программных скриптов, потому что это один и тот же язык. Строки в bat-файлах сообщат интерпретатору cmd.exe все, что от него требуется. Это экономит время и силы. Кроме того, есть возможность задать некоторую логику (например, простые циклы, условные предписания и т. д., которые концептуально схожи с процедурным программированием).
Встроенные команды
1. @echo – это команда bat-файлов, которая позволит увидеть работу скрипта в командной строке. Она используется для просмотра хода выполнения рабочего кода. Если у пакетного файла возникают какие-либо проблемы, то данная команда позволит быстро локализировать проблемы. Добавление off дает возможность быстро завершить выполнение кода, избегая вывода ненужной информации на экран.
2. Title предоставляет те же возможности, что и тег в HTML, т. е. создает заголовок для пакетного скрипта в окне командной строки.
3. Call вызывает один bat-файл из другого или подпрограмму внутри одного сценария. Например, функция power вычисляет степень %2 числа %1:
endlocal & set result=%prod%
4. Cls очищает командную строку. Используется для того, чтобы предыдущий вывод постороннего кода на помешал просмотру хода выполнения текущего скрипта.
5. Color задает цвет шрифта и фона. Например, команда color f9 задает белые буквы на синем фоне. Команда без параметра восстанавливает установки по умолчанию.
Литералы можно вводить в виде десятичных, шестнадцатеричных (с ведущими 0x) и восьмеричных чисел (с ведущим нулем). Например, set /a n1=0xffff присваивает n1 шестнадцатеричное значение.
Внешние команды
Библиотека команд bat-файлов огромна. К счастью, в Сети есть множество страниц, в которых все они перечислены, наряду с переменными пакетного скрипта.
Шаг 3: запись и запуск bat-файла
Следующий скрипт намного упростит ежедневную онлайн-активность. Что делать, если есть желание мгновенно открыть все свои любимые новостные сайты? Поскольку скрипты используют команды консоли, то можно создать сценарий, который открывает каждую новостную ленту в одном окне браузера.
Далее следует повторить процесс создания bat-файла, начав с пустого текстового документа. Для этого необходимо щелкнуть правой кнопкой мыши на пустом месте в какой-либо папке и выбрать пункт «Создать», а затем – «Текстовый документ». После открытия файла требуется ввести следующий скрипт, который запускает основные русскоязычные средства массовой информации, доступные в Интернете:
После сохранения для запуска скрипта достаточно дважды щелкнуть на нем. Веб-страницы мгновенно начнут загружаться. При желании можно разместить этот файл на своем рабочем столе. Это позволит получить мгновенный доступ ко всем любимым сайтам.
Организатор
rem Каждый файл в папке
rem проверить на наличие расширения и непринадлежность к данному скрипту
rem проверить наличие папки для каждого расширения, и если ее нет, то создать
rem переместить файл в папку
В итоге файлы в директории «Загрузки» сортируются по папкам, названия которых соответствуют их расширению. Это так просто. Данный пакетный скрипт работает с любым типом данных, будь то документ, видео или аудио. Даже если ПК не поддерживает их, сценарий все равно создаст папку с соответствующей меткой. Если уже есть каталог JPG или PNG, то программа просто переместит туда файлы с данным расширением.
Это простая демонстрация того, на что способны пакетные скрипты. Если какую-то несложную задачу необходимо выполнять снова и снова, будь то упорядочение файлов, открытие нескольких веб-страниц, массовое переименование или создание копий важных документов, пакетный сценарий поможет выполнить утомительную работу за пару кликов.
Exit /b :eof не переходит в конец файла
Ни одна ни вторая команда не помогает, а выйти нужно что б произошел запуск следующего батника.
Конец файла EOF
Начал заново учить программирование на c++ по книге Кернигана, Ритчи. Дошел до главы с EOF и никак.
Команда send keys переходит в конец макроса
Здравствуйте, подскажите, пожалуйста как решить проблему.. есть макрос (их много, но выложу.
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
3)Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.
Код бы с радостью показал но он на работе проблематично
call :fn1
код 2
exit /b
ну вот пример сначала вызов функции выполнится код1
потом выход из нее выполнится код2.
потом выход из программы будет.
Судя по предыдущей теме вы могли файл назвать так же как команду батника и из за этого проблемы были.
попробую воспроизвести то что я писал на работе
И почему-то срабатывают все последние 4 строчки после распаковки и все переходит на код
У вас в первых же строчках логическая ошибка
for просматривает каталоги вызывает goto x1
goto нужно если нужно заранее выйти из цикла, у вас наверное тут должно быть call
ну и соответственно остальное переделать
хотя может вы еще где то с goto запутали
в общем сложно так сказать лучше конечно посмотреть исходник
Добавлено через 37 минут
и вот еще допустим вызов call a и вместо выхода из процедуры идет goto p
так естественно нельзя
Добавлено через 8 минут
Одной справки windows как-то маловато. поэтому наверное и идет столько ошибок.
это не правило это принцип логичного построения программы
если call вызвал то нужно чтобы в конце функции exit /b или goto :eof было иначе ты не выйдешь из функции.
Добавлено через 1 минуту
вообще желательно стараться поменьше использовать goto а то часто вот так запутывают код
ну судить строго вот нашел, то что писал правда здесь не все, что описано, но структура уже есть как и что за чем идет. На работе писал что выводит логи здесь много чего еще не описано. ATRIBUTZ Спасибо за замечание вот теперь все понятно. По поводу goto и call. Если используем goto тогда :eof для call exit /b еще раз спасибо. Я знаю что в моем коде достаточно ошибок и лишних действий но в принципе он работает хотя будем стремится как правильно все писать.
как то так примерно
в общем постоянная ошибка это вы вызываете call функция и потом goto start без выхода из функции, а надо exit /b, если вы конечно не пытаетесь рекурсию делать.
Добавлено через 1 час 51 минуту
Сейчас я разберусь и сокращу ваш код.
Добавлено через 3 часа 29 минут
Насчет логики что если в архиве мы обнаруживаем doc или docx и при этом считаем что архив не подписан я не совсем понял, но оставил такой алгоритм если так надо.
Добавлено через 9 минут
еще по алгоритму *.doc и *.docx если допустим незапакованные попадутся мы их не проверяем что ли?
Урок bat-аники
Автор: Алексей Александров
Источник: RSDN Magazine #2-2005
Опубликовано: 11.07.2005
Исправлено: 10.12.2016
Версия текста: 1.0
Введение
Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.
Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.
К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.
Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.