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

时间:2019-06-03 19:39:46

标签: arrays batch-file variables login-script net-use

我正在尝试创建一个登录脚本,该脚本使用数组来循环一组字母。我已经添加了一个计数器来遍历数组。使用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 找不到网络名称。“

1 个答案:

答案 0 :(得分:2)

如果您仍然需要delayed expansion

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

:: Q:\Test\2019\06\03\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