Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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
For loop 批处理文件中的For循环_For Loop_Batch File - Fatal编程技术网

For loop 批处理文件中的For循环

For loop 批处理文件中的For循环,for-loop,batch-file,For Loop,Batch File,这是我在批处理脚本文件中创建用户并将其添加到组的代码 正如你所看到的,我必须从T-Z中硬编码任何变量。有没有办法读取这行代码,将第一个delimeters抓取到一个变量中,然后使用它,然后将该变量重新用于下一个delimeter。我只想将此代码缩减为for中的2个dsadd group命令,但得到相同的结果 %%D只是“Group1#Group2#Group3#Group4”中的某种东西,可以容纳未知数量的组 FOR /F "tokens=1-7 delims=#" %%T IN ("%%D")

这是我在批处理脚本文件中创建用户并将其添加到组的代码

正如你所看到的,我必须从T-Z中硬编码任何变量。有没有办法读取这行代码,将第一个delimeters抓取到一个变量中,然后使用它,然后将该变量重新用于下一个delimeter。我只想将此代码缩减为for中的2个dsadd group命令,但得到相同的结果

%%D只是“Group1#Group2#Group3#Group4”中的某种东西,可以容纳未知数量的组

FOR /F "tokens=1-7 delims=#" %%T IN ("%%D") DO (
  IF NOT [%%T] == [] (
    dsadd group cn="%%T",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%T",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%U] == [] (
    dsadd group cn="%%U",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%U",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%V] == [] (
    dsadd group cn="%%V",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%V",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%W] == [] (
    dsadd group cn="%%W",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%W",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%X] == [] (
    dsadd group cn="%%X",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%X",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%Y] == [] (
    dsadd group cn="%%Y",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%Y",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
  IF NOT [%%Z] == [] (
    dsadd group cn="%%Z",ou="GroupsOU",dc=advserver,dc=local
    dsmod group cn="%%Z",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local
  )
)
如果
%%D
包含由
#
以这种方式分隔的单词列表:“Group1#Group2#Group3#Group4”,则可以使用此代码获得相同的结果:

set groups=%%D
FOR %%T IN ("!groups:#=" "!") DO (

   dsadd group cn=%%T,ou="GroupsOU",dc=advserver,dc=local
   dsmod group cn=%%T,ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 

)

无论
%%D

中的组数是多少,前面的代码都能正确工作。第一个代码工作得很好,很完美,但第二个代码对我不起作用。这与我在For循环中无法设置变量有关。我在顶部启用了SETLOCAL ENABLEDELAYEDEXPANSION,变量设置得很好,但我似乎仍然无法在(%groups:#=%)区域中使用它。我需要把它改成!还是什么?是的,只需用感叹号更改百分比:
(!groups:#=!)
%%T似乎只保留了#now.Ops!为了正确处理延迟扩展,需要进行一些小的修改,请参见上面的新版本。请注意,
cn=“%%T”
已更改为
cn=%%T
,因为
%%T
现在已包含引号。
set groups=%%D
FOR %%T IN ("!groups:#=" "!") DO (

   dsadd group cn=%%T,ou="GroupsOU",dc=advserver,dc=local
   dsmod group cn=%%T,ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 

)