7

Я создал.BAT-файл в Windows 7, имеющий следующую строку:

PING XXX.XXX.XXX.XXX -t

(XXX заменяет фактический номер IP). Однако, когда я дважды щелкаю по этому пакетному файлу, я вижу, что команда ping многократно выполняется в цикле. Я даже пытался переименовать ping.BAT чтобы ping.CMD но результат тот же.

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

8 ответов8

14

Немного неясно, в чем именно проблема, с которой вы сталкиваетесь, так как вы не предоставляете вывод или снимок экрана того, что вам не нравится, но я объясню две наиболее вероятные проблемы, которые я вижу:

Учитывая, что ваш скрипт называется ping.bat и выглядит так:

 ping example.com

затем интерпретатор (cmd.exe) ищет / исследует пути в переменной среды %PATH% для чего-то, что выглядит как ping ... и делает это, добавляя каждый суффикс из %PATHEXT% который содержит что-то подобное .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC . Итак, вызов ping из ping.bat приводит к поиску ping.com ping.exe ping.bat и так далее. Интерпретатор найдет ping.bat в текущем рабочем каталоге (ваш ping.bat) и вызовет его.

Итак, у вас будет хорошая рекурсия : ping.cmd выполняет первую строку, ищет "ping", находит «ping.cmd», выполняет первую строку, ищет "ping", находит «ping.cmd», выполняет первая строка, ищет "ping", находит "ping.cmd" ...

Вторая проблема, с которой вы можете столкнуться:

Интерпретатор командного файла обычно повторяет команды, которые вы записали в файл .bat/.cmd. Таким образом, что-то вроде этого ping www.superuser.com будет выглядеть так:

 C:\Users\XYZ\Desktop>ping www.superuser.com

 Ping wird ausgeführt für superuser.com [64.34.119.12] mit 32 Bytes Daten:
 Antwort von 64.34.119.12: Bytes=32 Zeit=110ms TTL=46
 Antwort von 64.34.119.12: Bytes=32 Zeit=107ms TTL=46

Если вы хотите избавиться от C:\Users\XYZ\Desktop>ping www.superuser.com в выходных данных скрипта, тогда вам нужно либо добавить каждую строку перед @ (например, '@ping www.superuser. com ') в сценарии или поместите @echo off перед кучей командных строк, которые вы хотите выполнить "спокойно".

TL; DR; Не называйте ваши файлы bat такими же, как существующие программы.

11

У меня такая же проблема,

ping.bat содержит несколько строк команды ping

ping host1
ping host2
ping host3
...

Вывод в оболочке cmd выглядел так, как показано ниже, и продолжался в цикле и продолжался до разрыва с Ctrl+C

c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1    
c:\ping host1
...

c:\ping host1
^CTerminate batch job (Y/N)?

Чтобы решить эту проблему, просто переименуйте ping.bat , чтобы он не вызывал себя в командном файле, или не используйте ping.exe в качестве команды в командном файле.

ping.exe host1
ping.exe host2
ping.exe host3
...
3

Параметр -t делает пинг непрерывным.

Возможно, удалите параметр -t, а затем скажите вашему пакетному сценарию подождать, пока вы нажмете ввод, прежде чем убить экран cmd.

Давно не пользовался окнами, но это должно работать:

ping xxx.xxx.xxx.xxx
pause
exit
3

У меня были такие же проблемы. Вот разрешение:

Переименуйте ваш файл ping.bat в pingtest.bat

И убедитесь, что он содержит:

ping xxx.xxx.xxx.001
ping xxx.xxx.xxx.002
ping xxx.xxx.xxx.003
Пауза

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

1

Правый клик - Запуск от имени администратора работал на меня.

1

Локальное выполнение сценария, по-видимому, препятствует запуску ping.exe в сценарии. Попробуйте щелкнуть правой кнопкой мыши и "запустить от имени администратора". Я смотрю, как обновить политику выполнения.

Просто когда я подумал, что что-то знаю о Windows, они изменили это.


Обновление: рекурсия - это ответ ...

Вы не можете назвать это ping.bat и вызвать ping.exe

Вы также не можете назвать его route.bat и вызывать route.exe.

например, когда я запускаю ping.bat, затем снова запускаю его как pingx.bat:

-1

Это потому, что вы называете командный файл так же, как и команда ping. Переименуйте ваш пакетный файл в другое. И т.д .: myping.bat

-2

Другими словами, не называйте свой командный файл (ping). Используйте любое другое имя файла. И следующий код будет работать отлично.

@echo off
PING XXX.XXX.XXX.XXX
pause

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .