中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 04:30
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 执行不成功: for /l %%a in (1 1 3) do >%%a.txt echo.%%a
可打印版本  1,145 / 7
第1楼 tireless 发表于 2008-12-12 10:37
银牌会员 发帖 1,122 积分 2,025
执行不成功: for /l %%a in (1 1 3) do >%%a.txt echo.%%a
为什么这个批处理执行不成功,也没有任何错误提示:

换成这样却可以:

在 CMD 窗口中执行第一个批处理也没有问题:
g:\我的文档\桌面>for /l %a in (1 1 3) do >%a.txt echo.%a

g:\我的文档\桌面>echo.11>1.txt

g:\我的文档\桌面>echo.21>2.txt

g:\我的文档\桌面>echo.31>3.txt


发现 —— 把点去掉又可以:


为什么?

[ Last edited by tireless on 2008-12-12 at 13:09 ]
第2楼 HAT 发表于 2008-12-12 12:34
版主 发帖 5,017 积分 9,023
C:\Test>type test.bat
@echo off
for /l %%a in (1 1 3) do >%%a.txt echo.%%a

C:\Test>dir /b *.txt
File Not Found

C:\Test>test.bat

C:\Test>dir /b *.txt
1.txt
2.txt
3.txt
第3楼 tireless 发表于 2008-12-12 12:41
银牌会员 发帖 1,122 积分 2,025
RE #2
C:\>type test.bat
@echo off
for /l %%a in (1 1 3) do >%%a.txt echo.%%a
C:\>dir /b *.txt
找不到文件

C:\>test.bat

C:\>dir /b *.txt
找不到文件


最后一行要留空!为什么?
C:\>type test.bat
@echo off
for /l %%a in (1 1 3) do >%%a.txt echo.%%a

C:\>dir /b *.txt
找不到文件

C:\>test.bat

C:\>dir /b *.txt
1.txt
2.txt
3.txt


[ Last edited by tireless on 2008-12-12 at 12:48 ]
第4楼 wxcute 发表于 2008-12-12 12:58
中级用户 发帖 211 积分 458
真的很奇怪,可能与 for 的 /l 参数和重定向符号 > 有关。
第5楼 kissbill 发表于 2008-12-13 22:09
初级用户 发帖 35 积分 61
看来以后 ,DO后面代码还是加上括号的好
第6楼 s11ss 发表于 2008-12-14 00:37
银牌会员 发帖 566 积分 2,098
MS只是批处理中重定向符号置前时有bug。

以下测试代码中的>con置后后没问题。

部分测试代码是(保存为单独的批处理运行):

>con cd
1、仅仅这一行,cd后面没有回车换行或其它字符。
运行后CMD中看不到命令本身,看不到当前路径的执行结果。根本就没执行cd。

2、在行末加回车换行。
运行后看到路径了!而且命令本身也显示出来了。

3、把回车换行改成空格或=或;等。
结果同上。但有的命令不能换成=或;等。


call >con cd
1、仅仅这一行,cd后面没有回车换行或其它字符。
可以清楚地看到CMD中命令本身显示为call 1>con,说明后面的cd被抛弃了,所以命令cd根本没执行,也就没有结果显示。

2、后面加回车或换行等。
正常显示命令本身和路径。


>con
不管后面加不加东西,都不显示命令本身。执行结果与以上的异常结果一样。




结论:
批处理中重定向符号置前时存在bug,即,如果行末的命令后没有了其它如空格或回车换行等的字符,那末在CMD重新解释该行时势必认为重定向符号的操作是最后的操作从而抛弃其它命令,也即不能正确解释该行命令。
最简单可靠的解决办法是,在最后加个空格。
——————
ps:
1、还可以测试<和>>,都有相同的问题。
2、由一个或一个以上的 &或&&或|| 连接的包含或不包含 重定向符号 的多个命令,若最后一个包含或不包含 重定向符号 的命令能单独执行成功则能保证整行执行成功。
如:(结果正常)
>con cd&echo.a&&echo.b||cd>con
再如:(结果异常)
cd>con&echo.a&&echo.b||>con cd(仅仅这一行,cd后面没有回车换行或其它字符)

[ Last edited by s11ss on 2008-12-14 at 00:53 ]
第7楼 Helloworld 发表于 2008-12-14 09:41
新手上路 发帖 9 积分 9
原来前置也有这样的bug...
第8楼 Li103Z 发表于 2009-01-11 19:14
初级用户 发帖 38 积分 70
收藏了,真的很不错.
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023