无法在批处理循环内连接字符串

无法在批处理循环内连接字符串

我已经为此奋斗了一段时间,但我似乎无法弄清楚为什么。

我有这个批处理文件:

@echo on    
setlocal enabledelayedexpansion

for /F %%x in (FileList.txt) do (
    for /L %%i in (1,1,16) do (
        if %%i LSS 10 (set ctr=0%%i) else (set ctr=%%i)
        echo !ctr!
        set target = \\Server-!ctr! password /user:domain\username
        echo %target%
        echo net use z: %target%
        echo copy %%x "z:%%~pnx" /Y
        echo net use z: /delete
    )
)

我的 ctr 变量设置得当,但是,当我尝试连接它时,我得到的只是:\Server-!ctr! password /user:domain\username。我尝试过 %!ctr!%、%ctr%、%%ctr、%%ctr%%,所有这些都只是让它返回文字字符 - 而不是值。有趣的是,当我取出 set 命令时,我的 echo !ctr! 确实返回了值。我也尝试过将 set 参数括在引号中 - 结果相同,只是用引号括起来。

我错过了什么?

答案1

我错过了什么

您没有set正确使用该命令。

set target = \\Server-!ctr! password /user:domain\username

这将创建一个名为“target”的变量(请注意名称后面的额外空格)。

此外表达式的右侧包含空格,因此还需要一些引号。

变量名或字符串周围的任何多余空格都不会被忽略,与许多其他脚本语言一样,SET 不会容忍多余的空格。

来源

尝试以下替换:

set target="\\Server-!ctr! password /user:domain\username"

您也没有正确使用(理解)延迟扩展。

echo %target%
echo net use z: %target%

延迟扩展将导致变量在执行时而不是在解析时扩展。

来源启用延迟扩展

这应该是:

echo !target!
echo net use z: !target!

进一步阅读

相关内容