Har*_*ton 5 windows batch-file
作为我所看到的问题的一个例子,命令
for /D %%i in (*) do @if not exist m:\home\%%i echo %%i
Run Code Online (Sandbox Code Playgroud)
给我一个当前目录中另一个目录中不存在的目录列表.
但是,如果我想将输出传递给另一个命令,例如:
(for /D %%i in (*) do @if not exist m:\home\%%i echo %%i) | findstr /n .
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
echo was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
请注意,我不能将括号括起来,因为这会导致管道操作符在循环的每次迭代中被处理一次; 我需要将循环的输出通过管道传递给应用程序的单个实例.例如,如果我在此示例中将括号括起来,则行号findstr始终显示为1而不是计算目录数.
有人知道如何使这项工作,最好是在一般情况下,而不仅仅是这个具体的例子?
Windows 7 SP1 x64.
根据 Eryksun 的评论,这绝对是一个错误。它可以通过显式创建子进程来解决,而不是让批处理处理器为您做这件事:
cmd /s /c "for /D %%i in (*) do @if not exist m:\home\%%i echo %%i" | findstr /n .
Run Code Online (Sandbox Code Playgroud)
另一种选择是手动注入缺失的空格,方法是定义%space%为单个空格并说:
(for /D %%i in (*) do @if not exist ^%%space^%% m:\home\%%i echo %%i) | findstr /n .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |