windows – 为什么输出传输时某些“for”命令不起作用?

前端之家收集整理的这篇文章主要介绍了windows – 为什么输出传输时某些“for”命令不起作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为我所看到的问题的一个例子,命令
for /D %%i in (*) do @if not exist m:\home\%%i echo %%i

给我一个当前目录中另一个目录中不存在的目录列表.

但是,如果我想将输出传递给另一个命令,例如:

(for /D %%i in (*) do @if not exist m:\home\%%i echo %%i) | findstr /n .

我收到此错误消息:

echo was unexpected at this time.

请注意,我不能将括号括起来,因为这会导致管道操作符在循环的每次迭代中被处理一次;我需要将循环的输出通过管道传递给应用程序的单个实例.例如,如果我在此示例中省略括号,则findstrc中的行号将始终显示为1,而不是计算目录数.

有人知道如何使这项工作,最好是在一般情况下,而不仅仅是这个具体的例子?

Windows 7 SP1 x64.

这是具有特殊IF语法形式的解析器的问题,如:

IF exist
IF defined
IF errorlevel
IF x EQU y

但是这个没有问题

IF x == y

它可以通过定义包含单个IF的变量来解决.

set "_IF_=IF"
( %%_IF_%% defined path echo It's defined ) | more
( %%_IF_%% errorlevel 0 echo Errorlevel is 0 or above ) | more

这是有效的,因为%% _ IF _ %%将在子进程解析块之前进行扩展.

原文链接:https://www.f2er.com/windows/441492.html

猜你在找的Windows相关文章