对于批处理文件中的循环

时间:2013-09-25 15:10:28

标签: for-loop batch-file

这是我在批处理脚本文件中创建和添加用户组的代码。

正如你所看到的那样,我必须从T-Z硬编码才能永久变通。有没有办法读取该行抓取第一个分隔符变为可变并使用它然后重用该变量用于下一个分隔符。我只是想将这些代码切换到for中的2个dsadd组命令,但得到相同的结果。

%% 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
  )
)

1 个答案:

答案 0 :(得分:3)

FOR /F "tokens=1-7 delims=#" %%T IN ("%%D") DO (
   FOR %%S IN (%%T %%U %%V %%W %%X %%Y %%Z) DO (

      dsadd group cn="%%S",ou="GroupsOU",dc=advserver,dc=local
      dsmod group cn="%%S",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

中的群组数量如何,以前的代码都能正常运行