Batch file for/f嵌套在for/f命令中

Batch file for/f嵌套在for/f命令中,batch-file,cmd,Batch File,Cmd,如何在没有太多行的情况下成功运行此命令。我正在引用的文件mysessions.txt包含我有RDP会话的计算机列表,但我不想在注销之前登录到这些计算机。我希望对qwinsta用户/服务器:A%中的会话ID运行logoff命令,以便只有该用户会话被注销。当我独自运行qwinsta命令时,输出中的第三项是会话id,这就是为什么我在主命令中将令牌声明为3,它是变量%a 我运行的命令如下: for /F "tokens=3 delims= " %a in ('for /f %A in (mysessi

如何在没有太多行的情况下成功运行此命令。我正在引用的文件
mysessions.txt
包含我有RDP会话的计算机列表,但我不想在注销之前登录到这些计算机。我希望对
qwinsta用户/服务器:A%
中的会话ID运行
logoff
命令,以便只有该用户会话被注销。当我独自运行
qwinsta
命令时,输出中的第三项是会话id,这就是为什么我在主命令中将令牌声明为
3
,它是变量
%a

我运行的命令如下:

for /F "tokens=3 delims= " %a in ('for /f  %A in (mysessions.txt) do qwinsta user /server:%A') do echo %a
The system cannot find the file 'for /f %A in (mysessions.txt.
我收到的错误消息如下:

for /F "tokens=3 delims= " %a in ('for /f  %A in (mysessions.txt) do qwinsta user /server:%A') do echo %a
The system cannot find the file 'for /f %A in (mysessions.txt.

我需要逃跑。。。试试这个:

for /F "tokens=3 delims= " %a in ('for /f %A in (mysessions.txt^) do qwinsta user /server:%A') do echo %a

mysessions.txt
之后的命令关闭了外部
for
意外(太早)-因此语法错误。通过使用插入符号将其转义,您可以告诉外部
for
忽略它。

Stephan已经发现了问题,并提供了一个完美的解决方案。还有另一种语法也同样适用

FOR/F执行的命令通过CMD的/C参数在子进程中执行。查看CMD帮助,您可以看到CMD在执行命令之前会去掉/C参数周围的引号

因此,您可以使用以下选项:

for /F "tokens=3 delims= " %a in ('"for /f %A in (mysessions.txt) do qwinsta user /server:%A"') do echo %a
这非常有效,因为没有额外的双引号。但是,如果命令已经有了自己的引号,那么您就回到了可能必须转义某些字符的位置


但是你不能用一种更传统的方式使用两个循环吗

for /f %S in (mysessions.txt) do for /f "tokens=3 delims= " %A in ('qwinsta user /server:%S') do echo %A
您可能更喜欢以下更清晰的输出,它隐藏命令并简单地列出会话,然后是结果

for /f %S in (mysessions.txt) do @for /f "tokens=3 delims= " %A in ('qwinsta user /server:%S') do @echo %S: %A

您做了什么来尝试和理解错误消息?该消息清楚地解释了单个素数之间的文本被解释为文件名。你做了什么来把一行代码改写成可以工作的东西?@AdrianHHH-bo准确地说:文本的一部分被解释为文件名。不要太苛刻。如果您不习惯在某些特殊情况下转义某些字符,rmon的语法看起来是正确的。这很有效。太好了,谢谢。它显示了会话ID,因此现在我可以将“do echo%a”替换为“do logoff%a/服务器:%a”,以便从文件mysessions.txt中的计算机上注销所有登录会话。谢谢@dbenham第一个建议的脚本工作了。太好了。稍后我将使用您建议的其他脚本。您好@dbenham,我使用了建议的两个循环,效果不错。我的同事很久以前就使用了类似的方法,但他使用的是tokens=2而不是tokens=3。下面显示了我实际试图实现的目标:for/f%A in(mysessions.txt)do for/f“tokens=3 delims=“%A in('qwinsta用户/服务器:%A^')do echo%A&&echo%A for/f%A in(mysessions.txt)do for/f”tokens=3 delims=“%A in('qwinsta用户/服务器:%A^')do注销%A/服务器:%A