1

Этот сайт рулит! Я пытаюсь запустить простой .bat-файл на Server 2012, который пропингует другой сервер, отфильтровывает все строки, кроме одной, и затем записывает в файл для дальнейшего использования (затем я хочу, чтобы этот файл был отправлен куда-то, но это проект для другого обсуждения!).

Я собрал несколько команд поиска в этом форуме, и у меня есть команды, необходимые для этого. Когда я запускаю эти команды по одной из ms-dos, это работает. Однако, когда они помещают их все в файл летучей мыши, что-то портится. У меня нет большого опыта работы с Server OS, так что это может быть что-то простое, что мне не хватает. Любая помощь будет оценена.

Вот мои инструкции

ping 10.18.89.154 >C:\pinglog.txt
FOR /F "skip=8 delims=" %i in (C:\pinglog.txt) do @echo %i >C:\TEMP.TXT
SET /P SHOW= < C:\TEMP.TXT
ECHO %SHOW% >C:\pinglog.txt

И вот результат при запуске вручную:

Пакеты: отправлено = 4, получено = 4, потеряно = 0 (потеря 0%),

Но когда я запускаю эти команды в командном файле, окно cmd зависает в первой строке, показывает текст ниже в окне cmd и создает пустой файл ...

C:\Users\ администратора.WSI\ Documents> ping 10.18.89.154 1> C:\ pinglog.txt

Какие-нибудь мысли?

2 ответа2

1

Не удается запустить командный файл в Server 2012

Вот гораздо более простой способ сделать то, что вы хотите (в одной строке):

ping 10.18.89.154 | findstr "Packets" > c:\pinglog.txt

Приведенная выше команда будет работать как есть из командной строки или из командного файла.

Следующий пакетный файл использует google.com в качестве цели проверки связи, так как я не могу пропинговать что-либо в вашей сети с частным IP-адресом.

test.cmd:

ping www.google.com | findstr "Packets" > pinglog.txt

пример вывода:

C:\test>test

C:\test>ping www.google.com   | findstr "Packets"  1>pinglog.txt

C:\test>type pinglog.txt
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

C:\test>

Чтобы использовать исходные команды, в команде for /f необходимо заменить % на %%:

FOR /F "skip=8 delims=" %%i in (C:\pinglog.txt) do @echo %%i >C:\TEMP.TXT

Есть ли способ изолировать значения в этой строке, или вы можете создать только всю строку?

Причина, по которой я хотел вернуть только значение "получено", заключается в том, что если этот файл равен "0", я мог бы инициировать оповещение на основании этого.

Следующий пакетный файл найдет значение "Received" и выведет "Ping fail", если это значение равно 0 , иначе ничего не будет выведено.

В качестве бонуса он не использует никаких файлов.

Вы можете заменить echo "Ping failed" на команду оповещения, когда решите, что это должно быть.

test.cmd:

@echo off
for /f "usebackq skip=8 tokens=7" %%i in (`ping 10.18.89.154`) do (
   set _result=%%i
   goto :done
   )
:done
if "%_result:~0,1%"=="0" echo "Ping failed"

дальнейшее чтение

%%parameter Заменяемый параметр: в пакетном файле используйте %%G (в командной строке %G)

0

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

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