Board logo

标题: [特效代码] set/p=<nul输出的字符消失! [打印本页]

作者: Cameron    时间: 2008-11-17 18:27     标题: set/p=<nul输出的字符消失!

我用set/p=^><nul输出“>”代表进度条,可是一旦在P中执行了taskkill命令,之前输出的“>”会全部消失。不解。。。。。。

哪位大侠告诉我这是为啥呀?

=====================================================================================================

对不起,下面是测试代码:
  1. @echo off
  2. start taskmgr
  3. ping -n 2 127.1>nul 2>nul
  4. set/p=^><nul
  5. set/p=^><nul
  6. set/p=^><nul
  7. set/p=^><nul
  8. taskkill /im taskmgr.exe /f>nul
  9. set/p=^><nul
  10. pause
复制代码


======================================================================================================

新情况:
taskkill那句改为
  1. 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

你把>换成其他字符也是一样的,应该与回车符与换行符有关。
测试下面的代码,明显有输出问题:
  1. @tasklist |findstr /n .*
复制代码

作者: wxcute    时间: 2008-11-17 21:07     标题: 请试验如下

  1. @echo off
  2. ping -n 2 127.1>nul 2>nul
  3. set/p=^><nul
  4. set/p=^><nul
  5. set/p=^><nul
  6. set/p=<nul
  7. echo a>nul 2>nul
  8. set/p=^><nul
  9. pause
复制代码
2>nul 换成 3>nul
  1. @echo off
  2. ping -n 2 127.1>nul 2>nul
  3. set/p=^><nul
  4. set/p=^><nul
  5. set/p=^><nul
  6. set/p=<nul
  7. echo a>nul 3>nul
  8. set/p=^><nul
  9. 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