Windows 使用cmd'解析和规范化文件;s";对于/f";
我正在构建一个批处理文件,用于查询AD,将结果导入.txt文件,然后使用for/f循环解析和规范化.txt文件。我遇到了一些并发症,想让其他人看看 另外,使用VBS来解析/规范化而不是笨拙的for/f会更好吗 批次:Windows 使用cmd'解析和规范化文件;s";对于/f";,windows,batch-file,active-directory,cmd,Windows,Batch File,Active Directory,Cmd,我正在构建一个批处理文件,用于查询AD,将结果导入.txt文件,然后使用for/f循环解析和规范化.txt文件。我遇到了一些并发症,想让其他人看看 另外,使用VBS来解析/规范化而不是笨拙的for/f会更好吗 批次: @echo off echo ********************************************** echo * This batch file will query members of a DL * echo **********************
@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”,但这正是我遇到的问题。我的for循环出现了“fni此时出乎意料”的错误。这与从中的单引号转义%fn%变量有关吗
('more %fn%')
谢谢。您对
fn
的赋值是错误的。空格很重要。您正在创建一个名称中带有空格的变量。此外,您的引号不平衡,这将导致以后出现解析问题。赋值出现在两个位置。正确的形式如下:
set "fn=%gn%List.txt"
请注意,使用此表单时,在变量名前加引号时,值中不包含括引号
在批处理文件中运行时,必须将FOR/F语句中的百分比增加一倍。此外,由于我删除了引号,您应该将它们添加到“更多目标”中。最后,不需要@,因为您在脚本顶部关闭了ECHO
for /f "delims=, tokens=1,2" %%i in ('more "%fn%"') do echo %%i
您对
fn
的赋值错误。空格很重要。您正在创建一个名称中带有空格的变量。此外,您的引号不平衡,这将导致以后出现解析问题。赋值出现在两个位置。正确的形式如下所示:
set "fn=%gn%List.txt"
请注意,使用此表单时,在变量名前加引号时,值中不包含括引号
在批处理文件中运行时,必须将FOR/F语句中的百分比增加一倍。此外,由于我删除了引号,您应该将它们添加到“更多目标”中。最后,不需要@,因为您在脚本顶部关闭了ECHO
for /f "delims=, tokens=1,2" %%i in ('more "%fn%"') do echo %%i
工作解决方案(稍加重构):
工作解决方案(稍加重构):
如果在(%fn%)中使用
而不是在('more%fn%')
中使用,会发生什么情况?请注意,如果%fn%可能包含空格,则需要在(“%fn%”)中使用usebackq选项和。%i
在批处理脚本中不起作用。必须使用%i
。如果在(%fn%)中使用会发生什么情况
而不是('more%fn%')中的,
?请注意,如果%fn%可以包含空格,则需要使用usebackq选项和(“%fn%”)中的
。请注意%i
在批处理脚本中不起作用。您必须使用%i
。谢谢!这有助于我理解其余部分。谢谢!这有助于我理解其余部分。