[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[特效代码] 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 编辑 ]

相关代码先放出来阿,难道要别人先猜出你的代码再帮你测试不成。

TOP

笑。。。为何总有人问这样的问题时不贴代码。
心绪平和,眼藏静谧。

TOP

这是重定向符在做怪

你试下
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 是一个默认的句柄指向输出)

可能不太容易明白。
我正有个帖子关于重定向的,不过还没有编写完,写完通知你看。

TOP

回复 4楼 的帖子

不是吧?
换成dir、ping等命令,就不会消失的啊。

TOP

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

TOP

请试验如下

  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 编辑 ]

TOP

回复 7楼 的帖子

看了你的帖子,一下子看不大明白,慢慢研究下!


set/p=<nul这句中隐含的特殊字符是退格符吗?

[ 本帖最后由 Cameron 于 2008-11-19 15:25 编辑 ]

TOP

回复 8楼 的帖子

遇到问题,建议先尝试亲自测试:

把特殊字符复制到十六进制编辑器中,看看它的十六进制编码是什么。
或者,自己写个简单的批处理来验证一下。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表