0

AD を照会し、結果を .txt ファイルにパイプしてから、for /f ループを使用して .txt ファイルを解析および正規化するバッチ ファイルの作成に取り組んでいます。私はいくつかの合併症に遭遇しており、他の人に見てもらいたいと思っています.

また、扱いにくい/fの代わりに、VBSを使用して解析/正規化する方がよいでしょうか?

バッチ:

@echo off
echo **********************************************
echo * This batch file will query members of a DL *
echo **********************************************
echo.   
set /p gn=Enter DL to get Members:

echo. 
CHOICE /C:12 /M "Choose 1 for DOMAIN1 query, Choose 2 for DOMAIN2 query."
IF ERRORLEVEL 2 GOTO Label2
IF ERRORLEVEL 1 GOTO Label1 

:Label1
dsquery group DC=DOMAIN1,DC=NET -name "%gn%" | dsget group -members -expand >> "%gn%"List.txt
set fn = "%gn%"List.txt"
GOTO End

:Label2
dsquery group DC=DOMAIN2,DC=NET -name "%gn%" | dsget group -members -expand >> "%gn%"List.txt
set fn = "%gn%"List.txt"
GOTO End

:End

for /f "delims=, tokens=1,2" %i in ('more %fn%') do @ echo %i

作成された .txt ファイルのサンプル行を次に示します。

"CN=LastName1\, FirstName1,OU=OU1,OU=OUSUB1,DC=DOMAIN1,DC=net"
"CN=LongLastName1\, LongFirstName1,OU=OU1,OU=OUSUB1,DC=DOMAIN1,DC=net"
"CN=LastName2, FirstName2,OU=OU1,OU=OUSUB1,DC=DOMAIN1,DC=net"

for ループでは、コンマで区切ります。私のサンプル行から、トークン 1 を "CN=LastName1\" として、トークン 2 を FirstName1 として保存するつもりですが、ここから先に進みます。 .これは、 %fn% 変数を一重引用符からエスケープすることと関係がありますか?

('more %fn%') 

ありがとう。

4

2 に答える 2

4

の割り当てfnが間違っています。スペースは重要です。名前にスペースを含む変数を作成しています。また、引用符のバランスが取れていないため、後で解析の問題が発生します。割り当ては 2 か所で行われます。正しいフォームは次のようになります。

set "fn=%gn%List.txt"

変数名の前に引用符を付けてこのフォームを使用する場合、囲んでいる引用符は値に含まれないことに注意してください。

バッチ ファイル内で実行する場合は、FOR /F ステートメントのパーセントを 2 倍にする必要があります。また、引用符を削除したので、MORE ターゲットに追加する必要があります。最後に、スクリプトの先頭で ECHO OFF にしたため、@ は必要ありません。

for /f "delims=, tokens=1,2" %%i in ('more "%fn%"') do echo %%i
于 2013-02-06T20:35:46.787 に答える
0

実用的なソリューション(少しリファクタリングあり):

set /p gn=Enter DL to get Members:

IF EXIST "%gn%"-List.txt (
     DEL "%gn%"-List.txt
)

echo. 
CHOICE /C:12 /M "Type 1 to query DOMAIN1. Type 2 to query DOMAIN2."
IF ERRORLEVEL 2 GOTO Label2
IF ERRORLEVEL 1 GOTO Label1 


:Label1
dsquery group DC=DOMAIN1,DC=NET -name "%gn%" | dsget group -members -expand >>
"%gn%".txt
GOTO End

:Label2
dsquery group DC=DOMAIN2,DC=NET -name "%gn%" | dsget group -members -expand >>
"%gn%".txt
GOTO End

:End
REM Cleaning up the output -
SET "fn=%gn%.txt"
FOR /f "delims=, tokens=1,2" %%i in ('type "%fn%"') do ( 
     FOR /f "delims==\, tokens=1,2" %%b in ("%%i%%j") do (echo %%c,%%j) >>
"%gn%"-List.txt)

REM Deleting the Temp file -
DEL "%gn%".txt
echo.
echo %gn%-List.txt created!
PING 1.1.1.1 -n 4 >NUL
于 2013-02-07T20:38:12.340 に答える