Batch file 如何在“内部”中使用字符串;至于;在批处理命令中作为变量名循环

Batch file 如何在“内部”中使用字符串;至于;在批处理命令中作为变量名循环,batch-file,Batch File,尝试为windows创建用户管理器类型的程序时遇到问题。 在这一点上,我不确定这是一个简单的还是不可能修复的问题,因为我所有的尝试都是徒劳的。(很可能是因为对编程术语的了解太糟糕了。) 我试图将一些字符串和“for”循环计数器组合成一个字符串,然后使用生成的字符串调用已存储的变量,该变量的名称在最后一个字符串中定义 计数器应调用本教程中“数组”或数组替换中已定义的特定用户: 如何使字符串instantUser的行为类似于允许的变量\u users[0] @echo关闭 延迟扩展 标题CP脚本 s

尝试为windows创建用户管理器类型的程序时遇到问题。 在这一点上,我不确定这是一个简单的还是不可能修复的问题,因为我所有的尝试都是徒劳的。(很可能是因为对编程术语的了解太糟糕了。)

我试图将一些字符串和“for”循环计数器组合成一个字符串,然后使用生成的字符串调用已存储的变量,该变量的名称在最后一个字符串中定义

计数器应调用本教程中“数组”或数组替换中已定义的特定用户:

如何使字符串instantUser的行为类似于允许的变量\u users[0]

@echo关闭
延迟扩展
标题CP脚本
setlocal
:设置
你想做什么?[#]
回声1。修复用户+组
回声2。配置防火墙+更新
回声3。修复远程连接
回声4。查找非法文件
回声5。配置审核
回声6。固定小调-
设置命令=
set/p命令=类型输入:%=%
如果%COMMAND%==1转到帐户
如果%COMMAND%==2转到基本
如果%COMMAND%==3转到远程
如果%COMMAND%==4个转到文件
如果%COMMAND%==5转到审核
如果%COMMAND%==6转到次要位置
回显不正确的输入和转到设置
:帐户
cls
将文件路径回显到用户列表-
集合目录=
设置/P目录=类型输入:%=%

set/p Build=[示例]

@Echo关闭
SetLocal EnableDelayedExpansion
设置“允许的用户[0]=Johnny Was”
设置“允许的用户[1]=Jimmy Jazz”
设置“允许的用户[2]=Jimmy Jimmy”
设置“允许的用户[3]=Johnny Jewel”
设置/A“允许的用户长度=-1”
对于/F%%A In('Set allowed_users['),请设置/A“allowed_users_length+=1”
对于/L%%b In(0,1%,允许用户长度%)不(
网络用户“!允许的用户[%%b]!”/Add
)

你成功了!删除
instandUser
周围的
%
。但是使用该循环,你将永远不会有元素[0],因为你总是添加1;)关于最后一部分你是对的,但是当我删除两个感叹号或变量标识(无论什么)时,脚本在到达for循环时只会自动关闭(也没有创建新用户)。还有其他想法吗。还要澄清字符串instantUser的值是我要调用/使用其值的变量的名称。你不能这样做,你必须使用
set/A
;我建议提前这样做,比如
set/A allowed\u users\u length+=1
,然后
for/L%%b(1,1,%allowed_users_length%)执行
,然后
设置“instantUser=allowed_users[%%b]”
;顺便说一句,您缺少结束语
;您的代码将永远不会导致
ECHO关闭。
!并且您在结尾处也缺少一个右括号。使用时需要批处理文件顶部的行
setlocal EnableDelayedExpansion
。然后使用
!instantUser!
访问它。我建议您阅读此答案,但在t中有一点缺陷“create_array”脚本调用中已经定义了允许的变量_users[0,1,3…]以及“array_users_length”。很可能是因为我的错误,没有为脚本放入整个代码。但它实现了我的预期。使用“for”循环计数器作为我刚刚需要的变量名的一部分!允许\u用户[%%b]!不带任何字符串组合。Thx用于回答@Compo
@echo off
setlocal enabledelayedexpansion

title CP Script

setlocal
:Setup
echo What do you want to do? [#]
echo 1. Fix Users + Groups
echo 2. Configure Firewall + Updates
echo 3. Fix Remote Connection
echo 4. Find Illegal Files
echo 5. Configure Audits
echo 6. Fix Minor - 

set COMMAND=
set /p COMMAND=Type input: %=%

If %COMMAND%==1 goto Account
If %COMMAND%==2 goto Basic
If %COMMAND%==3 goto Remote
If %COMMAND%==4 goto Files
If %COMMAND%==5 goto Audits
If %COMMAND%==6 goto Minor
echo Incorrect input & goto Setup

:Account
    cls
    echo File path to user list-
    set DIRECTORY=
    set /P DIRECTORY=Type input: %=%
    set /p Build=<"%DIRECTORY%"
    cls

    call create_array allowed_users "," "%Build%"

    :: PROBLEM WAS HERE
    set /a "allowed_users_length_main=allowed_users_length-1"
    For /L %%b In (0,1,%allowed_users_length_main%) Do (
        Net User "!allowed_users[%%b]!" /Add
    )
    :: PROBLEM ENDED HERE

    echo.
    goto :Setup

:Basic
:Remote
:Files
:Audits
:Minor
endlocal

goto :eof