我在DOS脚本中有一个变量赋值问题for循环。它永远不会分配价值,它总是空白。下面的示例代码
@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”)
答案 0 :(得分:11)
您需要使用延迟展开 - !Word1!
而不是%Word1%
。
默认情况下,当shell首次读取语句时,所有变量都将替换为其当前值,并且每次命中该行时都会使用modified语句。这就是DOS的工作原理,它在Windows shell中保持这种方式以便向后兼容。
另一方面,延迟扩展在每次命中语句时重新插入值。这将给你想要的结果。