Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用cmd'解析和规范化文件;s";对于/f";_Windows_Batch File_Active Directory_Cmd - Fatal编程技术网

Windows 使用cmd'解析和规范化文件;s";对于/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 **********************

我正在构建一个批处理文件,用于查询AD,将结果导入.txt文件,然后使用for/f循环解析和规范化.txt文件。我遇到了一些并发症,想让其他人看看

另外,使用VBS来解析/规范化而不是笨拙的for/f会更好吗

批次:

@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
。谢谢!这有助于我理解其余部分。谢谢!这有助于我理解其余部分。