Проблема назначения переменных в пакетном файле DOS для цикла - PullRequest
4 голосов
/ 06 сентября 2010

У меня проблема с назначением переменной внутри DOS-скрипта for loop. Он никогда не присваивает значение, его всегда пусто. Ниже пример кода

@echo off
set ans=%1
SET STRING=%ans:"=%

echo Parsing the string "%STRING%":
for /f "tokens=1-2" %%a in ("%STRING%") do (
 set Word1 =%%a
 echo Word 1: %%a
 echo Word 1: %Word1%
 set Word2 =%%b
 if %%b.==. (Set server =\\.\pipe\mssql$microsoft##ssee\sql\query ) else (Set server =%%b)
)
echo Server name "%server%"
sqlcmd -s %server%

значение %% a не назначено переменной Word1 . Но когда я повторяю %% a, он показывает правильное значение. Также в последнем пустом значении проверьте условие, серверная переменная никогда не устанавливается. Я очень смущен здесь. кто-нибудь может мне помочь ??

P.S: вход в скрипт - любая строка из двух слов (например: a.bat "l dev-server")

1 Ответ

11 голосов
/ 06 сентября 2010

Необходимо использовать отложенное расширение - !Word1! вместо %Word1%.

По умолчанию, когда оболочка впервые читает инструкцию, все переменные заменяются их текущими значениями, а измененный оператор -используется каждый раз, когда эта строка ударил.Это просто, как работает DOS, и он сохраняется таким образом в оболочке Windows для обратной совместимости.

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

...