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 

   )
)

If %%D contains a list of words separated by # this way: "Group1#Group2#Group3#Group4", then you may get an equivalent result with this code:

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 

)

Previous code correctly works no matter the number of groups in %%D

于 2013-09-25T18:41:46.863 に答える