批处理文件:For /F Loop with Dsget only returns 第二行而不是第一行

BATCH File: For /F Loop with Dsget only returns the second line and not the first line

setlocal ENABLEDELAYEDEXPANSION

For /F "tokens=1" %%g in ('cmd /c whoami') do (set loggedinusername=%%g)
set loggedinusername=%loggedinusername:~6%
echo %loggedinusername%


For /F "Tokens=1 eol==" %%a in ('dsquery user -samid %loggedinusername% ^|dsget user -dept ^|find /V "dept"') do (set deptname=%%a)

echo deptname equals %deptname%

我希望有人可以看看这一点批处理代码并告诉我我哪里出错了。第一部分获取用户名工作正常,它在第二个 FOR /F.

中成功使用变量

但是,正如您在下面的输出中看到的那样,它确实成功找到了部门名称,但是当我输出变量时它只是 returns dsget 成功消息而不是上面的行。

非常感谢任何帮助或建议,干杯

C:\Users\*****\Desktop>for /F "Tokens=1 eol==" %a in ('dsquery user -samid USERNAME |dsget user -dept |find /V "dept"') do (set deptname=%a )

C:\Users\*****\Desktop>(set deptname=IT )

C:\Users\*****\Desktop>(set deptname=dsget )

C:\Users\*****\Desktop>echo deptname equals dsget
deptname equals dsget`

您可以使用许多选项,但是由于我无法使用这些命令,也无法查看您收到的实际输出,因此您必须使用或改编以下示例之一。

如果您知道部门名称永远不会以字符 d 开头,您可以只使用:

For /F "EOL=d Delims=" %%G In ('dsquery user -samid USERNAME ^| dsget user -dept') Do Set "deptname=%%G"

但是,如果部门名称可以以 d 开头,您可以使用额外的 find 命令:

For /F Delims^=^ EOL^= %%G In ('dsquery user -samid USERNAME ^| dsget user -dept ^| find /v "dept" ^| find /v "dsget"') Do Set "deptname=%%G"

或改用findstr命令:

For /F Delims^=^ EOL^= %%G In ('dsquery user -samid USERNAME ^| dsget user -dept ^| findstr /v "dept dsget"') Do Set "deptname=%%G"

或者你可以使用我在评论部分提供的想法:

Set "deptname="
For /F Delims^=^ EOL^= %%G In ('dsquery user -samid USERNAME ^| dsget user -dept ^| find /v "dept"') Do If Not Defined deptname Set "deptname=%%G"

其他可能的替代方案可能包括:

如果第一行总是dept:

For /F Skip^=1^ Delims^=^ EOL^= %%G In ('dsquery user -samid USERNAME ^| dsget user -dept') Do Set "deptname=%%G" & GoTo Next
:Next

如果第一行是空白,第二行是dept,那么把Skip^=1^改成Skip^=2^

如果您知道所有部门名称,那么您也可以将它们放在 findstr 匹配项中:

Set "depts=Design Finance IT Workshop"
For /F Delims^=^ EOL^= %%G In ('dsquery user -samid USERNAME ^| dsget user -dept ^| findstr /i "%depts%"') Do Set "deptname=%%G"