2017-09-05 137 views
0

随着%v%的.TXT本文件中,此批处理文件:为什么此传送命令失败?

PROMPT $g 
SET v="d" 
FOR %%F IN ("*.txt") DO (TYPE "%%F" ) 
FOR %%F IN ("*.txt") DO (SORT "%%F" ) 
FOR %%F IN ("*.txt") DO (TYPE "%%F" | SORT) 

产生

>PROMPT $g 

>SET v="d" 

>FOR %F IN ("*.txt") DO (TYPE "%F" ) 

>(TYPE "%v%.txt" ) 
content 
>FOR %F IN ("*.txt") DO (SORT "%F" ) 

>(SORT "%v%.txt" ) 
content 

>FOR %F IN ("*.txt") DO (TYPE "%F" | SORT ) 

>(TYPE "%v%.txt" | SORT ) 
The system cannot find the file specified. 

> 

为什么“系统无法找到指定的文件”,从仅具有管道命令行?

回答

1

使用echo代替type表明,膨胀是在最后一个命令寻找d.txt代替%v%.txt完成,它似乎与|该行被解析两次。

另一个例子:

set a=^%b^% 

set b=10 

echo %a% 

echo %a% | sort 
+0

完全正确。该命令首先在运行批处理文件的'cmd'实例中解析('%% F - >%v%.txt')。管道的每一侧都由一个新的单独的'cmd'实例来处理,该实例解析('%v%.txt - >“d”.txt')并执行该命令。 –

+0

@MC ND,哇,这是愚蠢的。那是如何预计工作,我想知道? 谢谢。 – ChrisJJ

+1

@ChrisJJ,管道将左侧的* process *的sdtout连接到右侧的* process *的stdin。虽然不是唯一的解决方案,但是它早在unix版本之后就已经实现了,而且它就像bash一样在今天实现。它可以工作,但它有时会咬你的怪癖。 –

相关问题