2017-02-16 4 views
1

Я пытаюсь создать пакетный файл, который будет проверять имя вашего компьютера, а затем он установит ваш IP-адрес на соответствующий IP-адрес для этого компьютера.Установить переменную внутри оператора IF (пакетный файл Windows)

У меня есть переменная с именем IPAddress, которая хранит новый IP-адрес. Затем у меня есть оператор IF, чтобы проверить имя компьютера и назначить новый IP-адрес. Моя проблема заключается в том, что внутри оператора IF, когда я устанавливаю переменную IPAddress на новый IP-адрес, который я хочу, он не встает. Когда я пытаюсь повторить переменную IPAddress сразу после ее установки, это все еще исходное состояние.

Вот мой код:

@echo off 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
    ECHO New IP Address: %IPAddress% 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
    ECHO New IP Address: %IPAddress% 
) 

pause 

Я на «БРИДЖ» компьютер и я получаю этот выход:

"BRIDGE" Computer 
New IP Address: 192.168.1.1 
Press any key to continue . . . 

Я не могу понять, почему оператор SET в заявлении IF Безразлично Кажется, он работает.

Любые идеи?

Заранее благодарен!

+2

Прочтите один из тысяч вопросов (с кодами) в круглых скобках, где cmd.exe оценивает вары при вводе блока. Чтобы получить фактические значения, вам необходимо принудительно отложить расширение. – LotPings

+0

Оффтопик: Какой велосипед - ваша верховая езда. Я не DH. В основном просто XC и эндуро. Удалит комментарий позже. – Squashman

+0

@Squashman Это изготовленный на заказ мотоцикл DH с 2000 года ... Так что он становится немного старым и шатким, но мне это нравится. Я получил действительно хорошую сделку, иначе я бы не купил его. :) – Jyclop

ответ

0

Вы можете использовать delayed expansion или упростить свой скрипт для вызова внешней метки, которая не связана с ограничениями текущего расширения.

упрощенный сценарий:

@echo off 
SET "IPAddress=192.168.1.1" 
IF "%computername%"=="TEST" (call :IPAddress "TEST" "192.168.1.50") else (IF "%computername%"=="BRIDGE" (call :IPAddress "BRIDGE" "192.168.1.25")) 
pause 
exit 

:IPAddress 
    ECHO "%~1" computer 
    SET "IPAddress=%~2" 
    ECHO New IP Address: %IPAddress% 
goto :EOF 

Старый сценарий с замедленным расширением:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
    ECHO New IP Address: %IPAddress% 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
    ECHO New IP Address: %IPAddress% 
) 

pause 
0
@echo off 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
) 

ECHO New IP Address: %IPAddress% 

pause 

Как уже указывалось, ваши первоначальные потребности код с задержкой расширения, или просто переместить echo из блок if

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

  • Нет связанных вопросов^_^