Board logo

标题: (已结)关于如何屏蔽 PAUSE >NUL 语句 [打印本页]

作者: stonewall     时间: 2005-9-13 19:20    标题: (已结)关于如何屏蔽 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 ]
作者: willsort     时间: 2005-9-13 20:04
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 ]
作者: stonewall     时间: 2005-9-14 14:14    标题: 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 ]
作者: willsort     时间: 2005-9-14 16:47
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)实现,可惜在批处理中不支持宏命令的调用。
作者: Climbing     时间: 2005-9-14 20:48
我很难为“不能修改xxx.bat和test.bat”想出一个合理的理由?就算你不能修改它,你可以先给它做一个备份,然后再修改它适合你自己使用。
作者: gne3     时间: 2007-2-14 05:41
up
作者: everest79     时间: 2007-2-15 19:50
嘿嘿,不存在一些特殊命令的话可以用test.cmd <nul哦