我已经为此奋斗了一段时间,但我似乎无法弄清楚为什么。
我有这个批处理文件:
@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!
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 放- 显示、设置或删除 CMD 环境变量。使用 SET 所做的更改将仅在当前 CMD 会话期间保留。