日期:2014-05-17  浏览次数:20797 次

for返回%~Ti的问题
如一条命令 for /f %a in ('dir /b "c:\xxx"') do echo %~ta为何返回的是echo已经开户

------解决方案--------------------
根据c盘下文件夹和文件的个数N,返回N次 echo %
------解决方案--------------------
for /f "delims=;" %a in ('dir /b "c:\"') do echo %~ta


FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

由于默认条件下,for命令在处理('command')的结果集的每一条记录时,其默认的分隔符集是空格、跳格键,在碰到文件名称包含空格时,就会出现只接受一部分文件名称便返回的情况,便导致后续的处理接受不到正确的对象而出现错误。
------解决方案--------------------
显示“ECHO 处于打开状态。”是由于%~ta是空,相当于执行了echo,没带参数。

%~ta为空的原因是,找不到该文件或者文件夹。

可能1:当前目录不是c:\,而你列出的文件是c:\的,当前目录找不到。
可能2:楼上说的,比如文件“a b.c",中间有空格。应该是一个项,却被分成a和b.c两个项。从而也找不到文件。

楼上用;做分隔符不太保险,因为分号可以作为文件名的一部分。可以使用*。

for /f "delims=*" %a in ('dir /b "c:\"') do echo %~ta


建议LZ学习下自己调试,像我把你的命令贴一下,就看到效果了。

例如:
K:\>for /f %a in ('dir /b "c:\*"') do echo %~ta

K:\>echo
ECHO 处于打开状态。


看下帮助,for /?,认真看下,会有收获的。