Bat файл pause не работает
Я создаю простой командный файл, чтобы помочь в нескольких вещах, и у меня есть некоторые инструкции, которые он распечатывает, а также, что я хочу, чтобы пользователь видел перед выходом. В настоящее время окно закрывается очень быстро. Поэтому я добавил PAUSE в конце файла, но он не хочет работать.
Я просмотрел другие вопросы по SO и проверил, чтобы концы строк были CRLF и у меня есть CRLF в конце файла.
Выполняется ли последняя команда до паузы? Разделите свой script - по крайней мере последние несколько команд?
В качестве альтернативы, поскольку вы, похоже, используете Windows7, попробуйте команду Timeout и посмотрите, работает ли она.
Если последняя команда не работает, пауза не будет работать.
Так, например, у меня был пакетный файл phpunit, который выглядел так:
Когда phpunit не удалось, он просто вышел без паузы. Изменение его на это заставило его сделать паузу правильно:
У меня были проблемы даже с эхом.
предполагая, что это было вызвано длинным пакетным файлом. Пауза выполнялась, но она не приостанавливалась, это было почти так, как будто нажатие клавиши после выполнения Pause.
Пробовал предлагаемые решения выше; никто не работал.
Итак, просто для справки в будущем, вот что я сделал:
В принципе просто "пауза" > nul & pause > nul "; работает каждый раз.
Я думаю, я знаю, где проблема, у меня была та же проблема. Поэтому, если вы делаете это так, вы создаете новый файл и помещаете в него всю информацию о пакете и сохраняете его как обычный текст, и после этого просто переименуйте расширение, которое не будет работать:). Вы должны сохранить его через текстовый редактор, и оттуда вы должны выбрать "Пакетный файл (.bat;.cmd; *. Nt)", например, Notepad ++, вероятно, из-за кодирования, так что сделайте это так, и я thnk его будет в порядке. GL!:)
Просто добавив ответ Тима, если вы хотите, чтобы окно всегда отображалось, вы можете записать файл .bat, например:
Еще в рубрике
Другие вопросы
Нужна помощь в пакетном файле для поиска определенной строки, создаваемой в другом сеансе с открытой рассылкой?
I am creating a simple batch file to assist in a few things, and I have some instructions that it prints out as well that I want the user to see before exit. Currently, the window closes very quickly. So I added PAUSE at the end of the file, but it does not want to work.
I looked at other questions on SO and have checked to make sure the line endings are CRLF and that I have CRLF at the end of the file.
I honestly do not know why, but it has started working today. My apologies for this, but I have no idea what happened. I did not even change the script!
8 Answers 8
If the last command fails pause won't work.
You can fix it by putting "call" behind the command you are running (whatever command is before the pause) then the pause will work.
So for example I had a phpunit batch file that looked like this:
When phpunit failed it just exited without pausing. Changing it to this made it pause correctly:
Thanks for this, worked for me too. On a side note, seems that it doesn't have to fail, if the command before has any type of exit code (even on success) in it then it seems to close the window.
Adding call had no effect for me on Windows 10 command prompt running as admin. I don't know why the pause command in my batch files (opened by AutoHotKey) suddenly stopped working today. I don't know what changed. They'd worked for weeks.
Just addition to Tim's answer, if you want the window to always display, you can write the .bat file like: call phpunit tests/sometests.php cmd /k
To give a bit more explanation, in CMD (and in MS-DOS before it) running a batch file ends execution of the current batch file. This means that, in the original example, nothing after the phpunit line will be run (i.e. it's nothing to do with pause , per se). If you want execution of the current batch file to continue after running the external batch file, you need to use the call command, as per this answer.
Does the last command before pause execute successfully? Mind sharing your script - at least last few commands?
Alternatively, since you seem to be using Windows7, try Timeout command and see if that is working.
Well, if pause is called, it will work. Using timeout instead will not change that (except that it's calling a separate program instead of a shell-builtin). My guess would be that there is a goto :eof or exit /b somewhere before the pause (not uncommon in batch files with subroutines – where you cannot just add commands to the end to get them executed).
I was having issues even on echo. assuming it was caused by long batch file. Pause was executing but it was not pausing, it was almost like that it was pressing a key after Pause was executed.
Tried suggested solutions above; none worked.
So just for future reference, here is what I did:
Basically just "pause > nul && pause > nul"; works every time.
I think i know where is the issue, i had the same problem. So if you are making it like this, you creating a new file and put all the batch info inside it and save it like normal text and after this just rename the extension it won't work :). You have to save it via the text editor and from there you have to choose "Batch file(.bat;.cmd;*.nt)" for example Notepad++, its probably because of the encoding so do it like this and i thnk it will be ok. GL ! :)
Just addition to Tim's answer, if you want the window to always display, you can write the .bat file like:
@Marcel ok I added a comment to the original post, but will leave my answer here as well, the code format in comment is not clear.
I have the same problem. This occurs because of two reasons:
The first one is when running the batch file as administrator.
I have moved my batch file to desktop and try it as administrator and it works fine.
I have tried moving the batch file to any disk root (like C:\ D:\ etc.) and it works correctly.
I have tried moving the batch file to any directory with spaces and it works correctly.
The second and main reason is: There was some special characters (like @ or & or something like that) in the batch file's directory.
Just find this special character and remove it from the folder name. And it will work correctly.
Я создаю простой командный файл, чтобы помочь в некоторых вещах, и у меня есть некоторые инструкции, которые он также распечатывает, и я хочу, чтобы пользователь увидел их перед выходом. В настоящее время окно закрывается очень быстро. Я добавил PAUSE в конце файла, но работать не хочет.
Я просмотрел другие вопросы по SO и проверил, что концы строк CRLF и что у меня есть CRLF в конце файла.
Вы делаете что-то еще не так. Я просто попробовал еще раз, и у меня он отлично работает. - Cody Gray♦
Честно говоря, не знаю почему, но сегодня он заработал. Приношу свои извинения за это, но я понятия не имею, что произошло. Я даже сценарий не менял! - Samaursa
Итак, решение:
Прежде всего, я немного изменил свой .bat-файл / пакетный файл. Я заключил путь к файлу .py в двойные кавычки (") :
Наконец, вместо запуска файла .bat с py в начале пути к его местоположению, я просто запустил файл .bat. В моем PowerShell я перешел в каталог файла .bat, а затем просто запустил файл .bat:
Он вернул правильный результат:
Кроме того, мне удалось запустить командный файл из диалогового окна «Выполнить» (WIN + R). Результат был таким же, как при запуске командного файла непосредственно в PowerShell. Я просто ввел полный путь к пакетному файлу, заключив его в двойные кавычки:
- py выполняет файлы, написанные на Python. Он не выполняет файлы .bat, потому что интерпретатор Python не понимает синтаксис CMD, в котором записан файл .bat.
- Важно обязательно использовать кавычки (двойные или одинарные) для заключения путей, особенно когда между словами есть пробелы при написании путей к папкам или файлам. Конечно, вы не можете использовать одинарные кавычки для включения путей, если вы находитесь в командной строке, потому что CMD не рассматривает одинарные кавычки как что-либо, кроме обычного символа.
- '@' Указывает командной строке не отображать всю строку (путь или команду 'пауза') при запуске программы (файл .py), а просто выполнять программу.
Не используйте теги py , просто запишите путь к файлу .bat :
Если вы используете файл .bat для запуска этого кода:
Проблема в том, что
Попытается запустить файл .bat с помощью интерпретатора Python. Это ошибка, потому что интерпретатор Python понимает язык Python, но не понимает язык .bat / Powershell, на котором написан файл .bat .
@py C:\Users\. уже является недопустимым синтаксисом Python , потому что @py обрабатывается как декоратор, а за декораторами не может следовать имя символа, например C .
Как решить эту проблему: запустите файл .bat с помощью Powershell (при условии, что сам файл .bat правильный) или полностью выбросьте файл .bat и просто запустите:
Если вы хотите, чтобы ваш код Python был приостановлен (например, с @pause ), вы можете запросить ввод данных пользователем в конце вашего скрипта:
В создании этой статьи участвовала наша опытная команда редакторов и исследователей, которые проверили ее на точность и полноту.
Команда контент-менеджеров wikiHow тщательно следит за работой редакторов, чтобы гарантировать соответствие каждой статьи нашим высоким стандартам качества.
Из этой статьи вы узнаете, как предотвратить немедленный запуск пакетного файла, когда его открывают. Есть несколько различных команд, которые можно использовать для задержки пакетного файла. Имейте в виду, что вы должны хорошо знать, как создавать пакетные файлы, прежде чем пытаться сделать его задержку.
- Если есть готовый пакетный файл, щелкните по нему правой кнопкой мыши и в меню выберите «Изменить», чтобы открыть файл в Блокноте. Затем пропустите следующие два шага.
Откройте Блокнот. Введите блокнот , чтобы найти Блокнот, а затем нажмите «Блокнот» в верхней части меню «Пуск».
Создайте пакетный файл. Сначала введите команду @echo off , а затем введите другие команды своего пакетного файла.
- PAUSE — работа пакетного файла приостанавливается до тех пор, пока не будет нажата стандартная клавиша (например, пробел).
- TIMEOUT — работа пакетного файла приостанавливается на заданное количество секунд (или до нажатия клавиши).
- PING — работа пакетного файла приостанавливается до тех пор, пока файл не получит ответ с указанного адреса компьютера. Обычно это приводит к небольшой задержке, если пингуется рабочий адрес.
Выберите место, куда ввести команду задержки. Это можно сделать в любой точке кода (но после команды «Exit», если вы ее использовали). Прокрутите вниз, найдите точку, в которой хотите приостановить работу файла, а затем введите пробел между кодом до точки задержки и кодом после этой точки.
Ребята, наконец то решил! Большое спасибо всем, кто ответил на мой вопрос или оставил отзыв через комментарии! Я очень благодарен за ваше драгоценное время, которое вы пытаетесь помочь такому нубу, как я. Спасибо!:)
7 ответы
Если последняя команда не удалась, пауза не сработает.
Так, например, у меня был командный файл phpunit, который выглядел так:
Когда phpunit не удался, он просто вышел без паузы. Изменение его на это сделало паузу правильно:
ответ дан 07 мар '12, в 05:03
Спасибо за это, у меня тоже сработало. С другой стороны, кажется, что он не должен терпеть неудачу, если в предыдущей команде есть какой-либо тип кода выхода (даже в случае успеха), то кажется, что окно закрывается. - dann.dev
Добавление call не повлиял на меня в командной строке Windows 10, запущенной от имени администратора. Я не знаю почему pause Команда в моих пакетных файлах (открытых AutoHotKey) сегодня внезапно перестала работать. Не знаю, что изменилось. Они работали неделями. - Райан
Просто в дополнение к ответу Тима, если вы хотите, чтобы окно всегда отображалось, вы можете написать файл .bat, например: call phpunit tests / sometests.php cmd / k - Джастин
Чтобы дать немного больше объяснений, в CMD (и в MS-DOS до него) запуск командного файла завершает выполнение текущего командного файла. Это означает, что в исходном примере ничего после phpunit линия будет запущена (т.е. это не имеет отношения к pause , как таковой). Если вы хотите, чтобы выполнение текущего командного файла продолжалось после запуска внешнего командного файла, вам необходимо использовать call команда в соответствии с этим ответом. - HappyDog
Успешно ли выполняется последняя команда перед паузой? Не возражаете поделиться своим сценарием - хотя бы несколькими последними командами?
В качестве альтернативы, поскольку вы, похоже, используете Windows7, попробуйте команду Timeout и посмотрите, работает ли она.
Ну если pause is позвонил, будет работать. С использованием timeout вместо этого не изменит этого (за исключением того, что он вызывает отдельную программу вместо встроенной оболочки). Я предполагаю, что есть goto :eof or exit /b где-то до pause (не редкость в пакетных файлах с подпрограммами - где вы не можете просто добавить команды в конец, чтобы они выполнялись). - Джо
Что делать, если последняя команда выдает исключение, как в моем случае? - Хуан Хосе Мелеро Гомес
У меня были проблемы даже с эхо . предполагая, что это было вызвано длинным пакетным файлом . Пауза выполнялась, но она не приостанавливалась, это было почти так, как если бы она нажимала клавишу после выполнения паузы.
Пробовал предлагаемые решения выше; никто не работал.
Так что на будущее, вот что я сделал:
В основном просто "пауза> нуль && пауза> нуль"; работает каждый раз.
pause > nul определенно работает, просто не дает смысла press any key. - T.S.
Конечно, в идеальном мире, но, как я уже упоминал несколько раз, это не значит, что это решение. - Зунэйр
Думаю, я знаю, в чем проблема, у меня была такая же проблема. Итак, если вы делаете это так, вы создаете новый файл, помещаете в него всю информацию о пакете и сохраняете его как обычный текст, а после этого просто переименуйте расширение, оно не будет работать :). Вы должны сохранить его через текстовый редактор, и оттуда вы должны выбрать «Пакетный файл (.летучая мышь;.cmd; *. nt) "например Notepad ++, это, вероятно, из-за кодировки, так что сделайте это так, и я думаю, все будет в порядке. GL! :)
ответ дан 26 апр.
Просто в дополнение к ответу Тима, если вы хотите, чтобы окно всегда отображалось, вы можете написать файл .bat, например:
@Marcel, вы занижали мой ответ только потому, что я оставил его как ответ, а не комментарий? - Джастин
@Justin Я использую угловой интерфейс командной строки. ng cmd /k - sky91
У меня точно такая же проблема. Это происходит по двум причинам:
Первый - это когда запуск командного файла от имени администратора.
Я переместил свой командный файл на рабочий стол и попробовал его как администратор, и он отлично работает.
Я попытался переместить командный файл в любой корень диска (например, C: \ D: \ и т. Д.), И он работает правильно.
Я пробовал переместить командный файл в любой каталог с пробелами, и он работает правильно.
Вторая и основная причина: В каталоге командного файла были некоторые специальные символы (например, @ или & или что-то в этом роде).
Просто найдите этот специальный символ и удалите его из имени папки. И будет работать правильно.
ответ дан 24 мая '18, 03:05
Я не мог понять почему pause только ненадолго остановился в моем сценарии. Ответы здесь помогли мне решить проблему, и я наконец понял, что происходит в моем случае:
start / b
Если вы запускаете приложение с start /b возможно, приложение отправит какой-то вывод на стандартный вывод после задержки. Если этот вывод приходит, когда pause команда запущена, это будет интерпретировано как нажатие клавиш и, естественно, скрипт продолжится. У вас наверняка возникнет эта проблема, если вы используете start /b с командами, которые подключаются к удаленным компьютерам:
Читайте также: