如何使用批处理文件中的数组变量分配驱动器号?

How does one assign a drive letter using an array variable in a batch file?

我正在尝试创建一个使用数组循环访问一组字母的登录脚本。我已将此与添加一个计数器相结合以在数组中移动。使用 net use 命令时,出现错误提示找不到网络名称。最终目标是根据需要将驱动器号列为 A、B、H、I 等。我确定我的语法有误,但我找不到答案。

如果我用驱动器盘符手动替换变量,我不会收到错误。机器是 运行 Windows Server 2016.

@echo off
set letter[1]="A"
set letter[2]="B"
set letter[3]="H"
set letter[4]="I"
set letter[5]="J"
set letter[6]="K"
set letter[7]="L"
set letter[8]="M"
set letter[9]="N"
set letter[10]="O"
set letter[11]="P"
set letter[12]="Q"
set letter[13]="R"
set letter[14]="S"
set letter[15]="T"

set /A counter=1


ifmember "domain users"
if %errorlevel% == 1 (
net use %%letter[%counter%]%%: \server\shares
set /A counter+=1
echo "Pass"
)

我希望输出将文件夹映射到新驱动器,但却得到“发生系统错误 67 找不到网络名称。"

反正你需要delayed expansion

您可以使用自扩展代码更有效地设置数组。

:: Q:\Test19\SO_56433581.cmd

@Echo off&SetLocal EnableDelayedExpansion
Set i=0&Set "letter= A B H I J K L M N O P Q R S T"
Set "letter=%letter: ="&Set /a i+=1&Set "letter[!i!]=%"
:: set letter
set /A counter=1
ifmember "domain users"
if %errorlevel% == 1 (
    net use !letter[%counter%]!: \server\sharesset /A counter+=1
    echo "Pass"
)

为了完整起见,代码源自 MonthName 扩展

Rem Set MonthName[01..12] to short English month names
Set i=100&Set "MonthName= Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
Set "MonthName=%MonthName: ="&Set /a i+=1&Set "MonthName[!i:~-2!]=%"
Set MonthName