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