В рамках задачи, над которой я работаю для клиента, мне нужно внести некоторые изменения в корпоративный сценарий входа в систему. Командная строка Windows определенно не является моей областью знаний, но с большей частью я справляюсь. Однако я сталкиваюсь со следующим непоследовательным поведением, которое я не могу понять.
Следующие команды:
Set TMP=
For /f "tokens=1,2,3 delims=:" %A in ('ipconfig ^| Find "Default Gateway" ^| Findstr/N "."') do (If not defined TMP Set TMP=%~C)
При выполнении из командной строки (окно CMD.EXE в Windows 7) работайте должным образом, и для TMP устанавливается IP-адрес моего шлюза по умолчанию. Однако, если я выполню те же самые команды из файла CMD, в том же окне, происходит сбой со следующим выводом (Echo On):
>Set TMP=
~C) was unexpected at this time.
>For /f "tokens=1,2,3 delims=:" ~C)
Я пробовал как CALL, так и напрямую запускать скрипт. Я пробовал как с, так и без usebackq
, а также со скобками и без скобок после DO
, с одинаковыми результатами каждый раз: он работает в интерактивном режиме, но не из сценария в том же сеансе.
Что, черт возьми, здесь происходит и как я могу это исправить?
Вот часть help for
вывод cmd:
To use the FOR command in a batch program, specify %%variable instead
of %variable. Variable names are case sensitive, so %i is different
from %I.