中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)关于如何屏蔽 PAUSE >NUL 语句
作者:
标题: (已结)关于如何屏蔽 PAUSE >NUL 语句 上一主题 | 下一主题
stonewall
初级用户





积分 22
发帖 3
注册 2005-9-13
状态 离线
『楼 主』:  (已结)关于如何屏蔽 PAUSE >NUL 语句

大家好:
      目前做项目时,遇到了一个难题。
      我编写了一个 test.bat文件
      @ECHO OFF
      @ECHO Press any key to exit ...
      pause > nul

现在我想屏蔽掉 pause > nul 语句。但是,遗憾的是我不能修改test.bat文件的内容。所以,我想请教大家是否有什么方法在调用 test.bat文件时,不执行
pause > nul 这条语句呢?

谢谢大家的帮助!!!

[ Last edited by willsort on 2005-9-16 at 09:49 ]

2005-9-13 19:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re stonewall:

      可以利用 test.bat 过滤出一个新的批处理程序,然后调用它。例如:
  find /v /i "pause" < test.bat > %temp%.\_test.bat
  call %temp%.\_test.bat
  for %%f in (%temp%.\_test.bat*) do del %%f
[ Last edited by willsort on 2005-9-13 at 20:07 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-9-13 20:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stonewall
初级用户





积分 22
发帖 3
注册 2005-9-13
状态 离线
『第 3 楼』:  Re willsort 关于如何屏蔽 PAUSE >NUL 语句

谢谢 willsort版主的回贴!
您提供的方法我试验过了很好用。
但是我可能有点得寸进尺了,由于业务需要,目前我在调用 test.bat之前还要调用另一个bat文件(xxx.bat)。下面是它的调用顺序。
文件fff.bat的内容如下:
=============================
xxx.bat
=============================

文件xxx.bat的内容如下:
=============================
test.bat
...
=============================

文件test.bat的内容如下:
=============================
     @ECHO OFF
     @ECHO Press any key to exit ...
     pause > nul
     ...
=============================

目前的情况是,xxx.bat 以及 test.bat 的内容我都不能修改。我只能修改 fff.bat的内容。在这种情况下,我想屏蔽掉 test.bat文件内的 pause > nul 语句。怎样通过修改fff.bat的内容来达到我的目的呢?
此外,糟糕的是,由于在xxx.bat当中还有许多操作,所以我不能跳过xxx.bat文件。
即 fff.bat文件必须先调用xxx.bat文件然后由xxx.bat来调用test.bat!

另外,如果您有相关的网络资源,能否告诉小弟?
谢谢!

[ Last edited by stonewall on 2005-9-14 at 14:49 ]

2005-9-14 14:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 4 楼』:  

Re stonewall:

      先说简单一些的可行性方案:在 fff.bat 中用 cd 改变批处理的当前路径,然后将test.bat 过滤结果置于新的当前路径下,并名为 test.bat,然后再调用 xxx.bat ,此时在 xxx.bat 调用的 test.bat 便是我们自定义的版本了。

      这种方案牵涉到两个问题,一是 xxx.bat 如何调用;因为当前路径改变,所以调用时需加上路径,但保存和获取原来的路径是比较麻烦的(在NT系列下可以通过保存 %cd% 变量来返回原路径),不如直接将原 xxx.bat 拷贝至新路径下后再跳转;第二是如何返回到原来的当前路径,跳转到新路径后,返回原路径仍需保存和获取元路径,简单的处理办法是,在原路径下新建子目录,然后以此子目录为新路径,返回时直接cd..即可,但有可能原路径是只读的。

      再说另一个复杂一些的方案:如果你所应用的平台是 WinNT 系列,那么可以使用 for /f 命令过滤 xxx.bat ,得到一个新的批处理 %temp%.\_xxx.bat ,在其中将 test.bat 的调用替换为 %temp%.\_test.bat 的调用,然后你在 fff.bat 中调用 %temp%.\_xxxt.bat 。如果你使用的是 Win9x/MSDOS 系列,可以使用第三方命令,替换这个调用串,比如 hexc,change,它们也可以应用于 WinNT 系列中。

      当然,这样的解决方案,转折是大了一些。如果你的 test.bat 调用位于 xxx.bat 的首部或尾部,倒可以将它整合进 fff.bat 中,放在 xxx.bat 调用的前一句或后一句。

      除此而外,我们仅余直面“屏蔽内部命令”这一难题,如果在命令行,倒可以用 doskey 的宏命令(doskye pause=rem)实现,可惜在批处理中不支持宏命令的调用。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-9-14 16:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 5 楼』:  

我很难为“不能修改xxx.bat和test.bat”想出一个合理的理由?就算你不能修改它,你可以先给它做一个备份,然后再修改它适合你自己使用。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-9-14 20:48
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
gne3
高级用户

DOS学徒


积分 526
发帖 252
注册 2007-2-12
状态 离线
『第 6 楼』:  

up

2007-2-14 05:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 7 楼』:  

嘿嘿,不存在一些特殊命令的话可以用test.cmd <nul哦

2007-2-15 19:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: