加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

batch-file – 用于循环的DOS批处理文件中的变量赋值问题

发布时间:2020-12-14 02:09:03 所属栏目:Windows 来源:网络整理
导读:我在DOS脚本中有一个变量赋值问题for循环.它永远不会分配价值,它总是空白.下面是示例代码 @echo offset ans=%1SET STRING=%ans:"=%echo Parsing the string "%STRING%":for /f "tokens=1-2" %%a in ("%STRING%") do ( set Word1 =%%a echo Word 1: %%a echo
我在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 =.pipemssql$microsoft##sseesqlquery ) else (Set server =%%b)
)
echo Server name "%server%"
sqlcmd -s %server%

%% a的值未分配给变量Word1.但当我回显%% a时,它会显示正确的值.在最后一个空值检查是否条件,服务器变量永远不会设置.我在这里很困惑.有人可以帮我吗??

P.S:脚本的输入是任何2个字符串(例如:a.bat“l dev-server”)

解决方法

你需要使用延迟扩展 – !Word1!而不是%Word1%.

默认情况下,当shell首次读取语句时,所有变量都将替换为其当前值,并且每次命中该行时都会使用modified语句.这就是DOS的工作原理,它在Windows shell中保持这种方式以实现向后兼容.

另一方面,延迟扩展在每次语句被命中时重新插入值.这将给你想要的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读