gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:51:53 26 4
gpt4 key购买 nike

我在 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 时,它显示了正确的值。同样在最后一个空值检查条件中,服务器变量从未设置。我在这里很困惑。有人可以帮我吗??

附注:脚本的输入是任何 2 个单词的字符串(例如:a.bat "l dev-server")

最佳答案

您需要使用延迟扩展 - !Word1!而不是 %Word1% .

默认情况下,当 shell 第一次读取语句时,所有变量都替换为其当前值,并且每次命中该行时都使用修改后的语句。这就是 DOS 的工作方式,为了向后兼容,它在 Windows shell 中保持这种方式。

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

关于batch-file - DOS批处理文件for循环中的变量赋值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com