Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在批处理文件中迭代数组_Arrays_Loops_Batch File_Terminal Services - Fatal编程技术网

Arrays 在批处理文件中迭代数组

Arrays 在批处理文件中迭代数组,arrays,loops,batch-file,terminal-services,Arrays,Loops,Batch File,Terminal Services,我正在编写一个批处理文件()来迭代终端服务器,搜索特定用户。所以,我得到了我要做的基本开始 输入用户名 迭代终端服务器 显示找到用户的服务器(根据连接丢失的方式,可以在多个服务器上找到这些服务器) 显示选项菜单 迭代我拥有的终端服务器: for /f "tokens=1" %%Q in ('query termserver') do (set __TermServers.%%Q) 现在,我得到了错误 Environment variable __TermServers.SERVER1 not

我正在编写一个批处理文件()来迭代终端服务器,搜索特定用户。所以,我得到了我要做的基本开始

  • 输入用户名
  • 迭代终端服务器
  • 显示找到用户的服务器(根据连接丢失的方式,可以在多个服务器上找到这些服务器)
  • 显示选项菜单
  • 迭代我拥有的终端服务器:

    for /f "tokens=1" %%Q in ('query termserver') do (set __TermServers.%%Q)
    
    现在,我得到了错误

    Environment variable __TermServers.SERVER1 not defined
    
    …对于每个终端服务器。这是目前我的批处理文件中唯一的内容。你知道为什么会发生这种错误吗?显然,变量没有定义,但我理解SET命令就是这样做的

    我还认为,为了继续进行迭代(每个终端服务器),我需要做如下工作:

    :Search    
    for /f "tokens=1" %%Q in ('query termserver') do (call Process) 
    goto Break
    
    :Process
    for /f "tokens=1" %%U in ('query user %%username%% /server:%%Q') do (set __UserConnection = %%C)
    goto Search
    
    然而,有两件事让我感到困扰:

  • 调用进程时%%Q值是否仍然有效
  • 当我转到搜索时,for循环是否会重新开始
  • 我是用我可以使用的工具来做这件事的,所以尽管我很想听到PowerShell和其他实现这一点的方法,但这将是徒劳的。我有记事本,就这样


    注意:我将继续回答关于超级用户的这一行问题,除了它似乎更深入地了解编程细节。

    好的,这些问题/问题/等等。在一个:-)

    我还是不太明白你的剧本到底要写什么

    首先,
    set
    命令的语法是

    set <variable name>=<value>
    
    不过,在你的情况下,你可能想要别的东西。批处理文件中没有数组本身,您可以通过创建大量变量并在某处保留计数来模拟它们。我已经写过了(现在有点过时,但仍然有效)

    在您的例子中,您希望迭代多个服务器,并为每个服务器迭代多个用户。可以使用嵌套循环执行此操作:

    for /f "tokens=1" %%Q in ('query termserver') do (
       for /f "tokens=1" %%U in ('query user ... /server:%%Q' do (
          ...
       )
    )
    
    关于你的两个问题:

  • 不,循环变量仅在循环内部有效,在调用子例程时无效。但是,您可以将其传递给子例程:

    for ... in (...) do call Process %%Q
    
    然后,您可以使用子例程中的
    %1
    访问它。老实说,在大多数情况下,我认为嵌套循环更容易阅读

  • 另一个错误(会咬你):如前所述,
    set
    语法是

    set variable=value
    
    请注意,
    =
    符号周围没有空格。如果有,则在变量名称的末尾或值的开头有一个空格:

    > set foo = bar
    > echo %foo%
    %foo%
    > echo %foo %
     bar
    

    好的,这些都是相当多的问题

    我还是不太明白你的剧本到底要写什么

    首先,
    set
    命令的语法是

    set <variable name>=<value>
    
    不过,在你的情况下,你可能想要别的东西。批处理文件中没有数组本身,您可以通过创建大量变量并在某处保留计数来模拟它们。我已经写过了(现在有点过时,但仍然有效)

    在您的例子中,您希望迭代多个服务器,并为每个服务器迭代多个用户。可以使用嵌套循环执行此操作:

    for /f "tokens=1" %%Q in ('query termserver') do (
       for /f "tokens=1" %%U in ('query user ... /server:%%Q' do (
          ...
       )
    )
    
    关于你的两个问题:

  • 不,循环变量仅在循环内部有效,在调用子例程时无效。但是,您可以将其传递给子例程:

    for ... in (...) do call Process %%Q
    
    然后,您可以使用子例程中的
    %1
    访问它。老实说,在大多数情况下,我认为嵌套循环更容易阅读

  • 另一个错误(会咬你):如前所述,
    set
    语法是

    set variable=value
    
    请注意,
    =
    符号周围没有空格。如果有,则在变量名称的末尾或值的开头有一个空格:

    > set foo = bar
    > echo %foo%
    %foo%
    > echo %foo %
     bar
    

    +1和检查:出色的描述和解释。如果我能多次投票,我会的。我还没有在互联网上找到一个提供好信息和完整示例的优秀资源。再一次,太棒了+1和检查:出色的描述和解释。如果我能多次投票,我会的。我还没有在互联网上找到一个提供好信息和完整示例的优秀资源。再一次,太棒了!!!