1

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

正如你所看到的,我必须从 TZ 对变量进行硬编码。有没有办法读取行将第一个定界符抓取到一个变量中并使用它,然后将该变量重新用于下一个定界符。我只想将此代码缩减为 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
  )
)
4

1 回答 1

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

于 2013-09-25T18:41:46.863 回答