标题: [特效代码] set/p=<nul输出的字符消失! [打印本页]
作者: Cameron 时间: 2008-11-17 18:27 标题: set/p=<nul输出的字符消失!
我用set/p=^><nul输出“>”代表进度条,可是一旦在P中执行了taskkill命令,之前输出的“>”会全部消失。不解。。。。。。
哪位大侠告诉我这是为啥呀?
=====================================================================================================
对不起,下面是测试代码:- @echo off
- start taskmgr
- ping -n 2 127.1>nul 2>nul
- set/p=^><nul
- set/p=^><nul
- set/p=^><nul
- set/p=^><nul
- taskkill /im taskmgr.exe /f>nul
- set/p=^><nul
- pause
复制代码
======================================================================================================
新情况:
taskkill那句改为- taskkill /im taskmgr.exe /f >nul 2>nul
复制代码
“>”就不会消失了。
Why???
[ 本帖最后由 Cameron 于 2008-11-17 19:42 编辑 ]
作者: wxcute 时间: 2008-11-17 18:45
相关代码先放出来阿,难道要别人先猜出你的代码再帮你测试不成。
作者: pusofalse 时间: 2008-11-17 19:02
笑。。。为何总有人问这样的问题时不贴代码。
作者: wxcute 时间: 2008-11-17 20:08 标题: 这是重定向符在做怪
你试下
taskkill /im notepad.exe /f 2>nul
taskkill /im notepad.exe /f>nul 2>con
再试下在 taskkill 前面加一行
echo+
你会发现 set/p 的显示与 taskkill 的输出是在同一行,这是问题的关键。
因为是在同一行,taskkill 就把前面的 4 个 > 符号当作是自己的输出来处理了,第一个 1>nul 其实已经把它们屏蔽掉了,只是由于不是同一条语句的原因导致前面的输出还 “滞留” 在屏幕上而已;第二个 2>con 由于是空输出(执行成功就没有错误输出)就把四个 > 彻底的抹掉了。
(注:2>con 是一个默认的句柄指向输出)
可能不太容易明白。
我正有个帖子关于重定向的,不过还没有编写完,写完通知你看。
作者: Cameron 时间: 2008-11-17 20:26 标题: 回复 4楼 的帖子
不是吧?
换成dir、ping等命令,就不会消失的啊。
作者: pusofalse 时间: 2008-11-17 20:51
你把>换成其他字符也是一样的,应该与回车符与换行符有关。
测试下面的代码,明显有输出问题:复制代码
作者: wxcute 时间: 2008-11-17 21:07 标题: 请试验如下
- @echo off
- ping -n 2 127.1>nul 2>nul
- set/p=^><nul
- set/p=^><nul
- set/p=^><nul
- set/p=<nul
- echo a>nul 2>nul
- set/p=^><nul
- pause
复制代码
2>nul 换成 3>nul- @echo off
- ping -n 2 127.1>nul 2>nul
- set/p=^><nul
- set/p=^><nul
- set/p=^><nul
- set/p=<nul
- echo a>nul 3>nul
- set/p=^><nul
- pause
复制代码
taskkill 命令的机制我无从分析。
======================================
新帖写好了:http://bbs.bathome.net/thread-2579-1-1.html
[ 本帖最后由 wxcute 于 2008-11-18 19:39 编辑 ]
作者: Cameron 时间: 2008-11-19 15:07 标题: 回复 7楼 的帖子
看了你的帖子,一下子看不大明白,慢慢研究下!
set/p=<nul这句中隐含的特殊字符是退格符吗?
[ 本帖最后由 Cameron 于 2008-11-19 15:25 编辑 ]
作者: Batcher 时间: 2008-11-19 19:38 标题: 回复 8楼 的帖子
遇到问题,建议先尝试亲自测试:
把特殊字符复制到十六进制编辑器中,看看它的十六进制编码是什么。
或者,自己写个简单的批处理来验证一下。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |