2015-11-22 6 views
0

Когда я запускаю свой командный файл, я получаю сообщение об ошибке «Синтаксис команды неверен». Ошибка появляется сразу после ввода y или n или что-либо еще при первом запросе на вход пользователя (userResponse). Я комментировал команды в коде один за другим, но я все еще получаю ошибку ...Пакетный файл, Синтаксис команды неверен

Где это похоже?

Спасибо!

Код:

@echo off 
color A 
title Trace Route 
SETLOCAL ENABLEDELAYEDEXPANSION 

:RestartPoint 

set /p userResponse="Would you like a list of local devices to trace (y/n)? " 

if !userResponse!==y (

net view 

set /p IPAddress="Enter the IP address that you would like to trace: " 
echo. 
set /p addressType="Enter the IP Address type (4 or 6): " 

if !addressType!==4 tracert -4 !IPAddress! 

if !addressType!==6 tracert -6 !IPAddress! 

echo. 

:openURLRestartPoint1 

set /p userResponseOpenURL="Would you like to map the found IP (y/n)? " 

if !userResponseOpenURL!==y (

start "" http://www.ip-adress.com/ip_tracer/ 
) 

if !userResponseOpenURL!==n(

echo. 
echo Exiting program... 
echo. 

PAUSE 

) else (

echo. 
echo Invalid request. Please try again. 
echo. 

GOTO openURLRestartPoint1 

) 

) 

if !userResponse!==n (

set /p IPAddress="Enter the IP address that you would like to trace: " 
echo. 
set /p addressType="Enter the IP Address type (4 or 6): " 

if !addressType!==4 tracert -4 !IPAddress! 

if !addressType!==6 tracert -6 !IPAddress! 

echo. 

:openURLRestartPoint2 

set /p userResponseOpenURL="Would you like to map the found IP (y/n)? " 

if !userResponseOpenURL!==y (

start "" http://www.ip-adress.com/ip_tracer/ 
) 

if !userResponseOpenURL!==n(

echo. 
echo Exiting program... 
echo. 

PAUSE 

) else (

echo. 
echo Invalid request. Please try again. 
echo. 

GOTO openURLRestartPoint2 

) 

) else (

echo. 
echo Invalid request. Please try again. 
echo. 

GOTO RestartPoint 

) 
+3

Вы недостающий пробел перед '(' в 'если userResponseOpenURL = = n ('. Кроме того, метки и gotos не играют хорошо внутри блоков кода, возможно, вы захотите переместить эти метки прямо над их соответствующими операциями' if! userResponse! =='. – SomethingDark

ответ

1

вы пропустили пробелы в

if !userResponseOpenURL!==n(

, которые должны быть

if !userResponseOpenURL!==n (

Там также, как представляется, некоторые проблемы с этикетками в случае утверждения, будет обновляться мой ответ, когда я понял, как это сделать, но вы увидите, что когда вы удаляете метки внутри, если stat и внесение изменений, как было предложено выше, оно будет работать. Наконец, если вы нажмете y в начале set, он все равно перейдет к последнему, потому что это еще работает только для части !userResponse!==n.

EDIT: Уважаемый бог, это кажется неправильным, но вы должны, по-видимому, использовать бесполезную надпись над вашими метками внутри блоков, согласно https://stackoverflow.com/a/4006006/5022761. Это позволит сделать ваш код следующим образом:

@echo off 
color A 
title Trace Route 
SETLOCAL ENABLEDELAYEDEXPANSION 
:RestartPoint 
set /p userResponse="Would you like a list of local devices to trace (y/n)? " 
if !userResponse!==y (
    net view 
    set /p IPAddress="Enter the IP address that you would like to trace: " 
    echo. 
    set /p addressType="Enter the IP Address type (4 or 6): " 
    if !addressType!==4 tracert -4 !IPAddress! 
    if !addressType!==6 tracert -6 !IPAddress! 
    echo. 
:test 
:openURLRestartPoint1 
    set /p userResponseOpenURL="Would you like to map the found IP (y/n)? " 
    if !userResponseOpenURL!==y (
    start "" http://www.ip-adress.com/ip_tracer/ 
) 
    if !userResponseOpenURL!==n (
    echo. 
    echo Exiting program... 
    echo. 
    PAUSE 
) else (
    echo. 
    echo Invalid request. Please try again. 
    echo. 
    GOTO openURLRestartPoint1 
) 
) 
if !userResponse!==n (
    set /p IPAddress="Enter the IP address that you would like to trace: " 
    echo. 
    set /p addressType="Enter the IP Address type (4 or 6): " 
    if !addressType!==4 tracert -4 !IPAddress! 
    if !addressType!==6 tracert -6 !IPAddress! 
    echo. 
:test 
:openURLRestartPoint2 
    set /p userResponseOpenURL="Would you like to map the found IP (y/n)? " 
    if !userResponseOpenURL!==y (
    start "" http://www.ip-adress.com/ip_tracer/ 
) 
    if !userResponseOpenURL!==n (
    echo. 
    echo Exiting program... 
    echo. 
    PAUSE 
) else (
    echo. 
    echo Invalid request. Please try again. 
    echo. 
    GOTO openURLRestartPoint2 
) 
) else (
    echo. 
    echo Invalid request. Please try again. 
    echo. 
    GOTO RestartPoint 
) 

Для больше о если/другое/другое, если посмотреть здесь:! https://stackoverflow.com/a/25385407/5022761

+0

Было бы лучше, если ' : openURLRestartPoint1' был перемещен выше 'if! userResponse! == y (' и ': openURLRestartPoint2' был перемещен выше' if! userResponse! == n ('потому что значение'! userResponse! 'не изменится, и таким образом метки не будут внутри блоков кода. – SomethingDark

+1

Вы в самом разгаре t, но я подумал, что причина, по которой они были размещены, заключалась в том, что пользователю не нужно было дважды запрашивать ip-адрес и ip-тип, что и получается. Хотя я согласен с вами, если это не важно, этот код выглядит очень плохой взломать нужный код –

+1

правильно –

Смежные вопросы