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

[特效代码] 命令的输出重定向(需包括前后提示符)

先描述一下我想做的:
用户在WEB页面中输入命令,程序在后台自动打开cmd窗口,输入命令执行之,待命令完成后(即出现命令完成提示符),对命令的输出信息进行判断(判断关键字),如果成功则执行下一个命令。每执行完一个命令都必须把整个命令执行的过程在WEB页面呈现给用户。

目前cmd窗口中输入命令以及对输出信息的判断是由第三方程序完成。原来的做法是在命令的执行过程中由第三方程序不断地将整个cmd窗口的内容复制粘贴到文件中再进行关键字判断。当判断命令成功时就把文件中的内容输出到WEB页面中。但这种方法当同时有多个cmd窗口在进行操作时会出现问题,而且输入到WEB页面的内容也可能包含前次命令执行的信息。

现在想用重定向来做,但有些问题。具体如下:
我现在用的重定向是这样的: command 1>file  2>&1
但这样file中的内容只有命令的输出信息,在WEB中呈现的时候不够全面,我希望能把输入命令的那一行以及命令完成后的那一行文字也输入到file中。不知道在P中能不能实现?

举例如下:
  1. C:\>rasdial test
  2. 远程访问错误 623 系统无法为这个连接找到电话簿项。
  3. 若需此错误的详细说明:
  4. 请在帮助中键入“hh netcfg.chm”
  5. 单击“疑难解答”,选择“错误信息”,然后键入 “ 623”
  6. C:\>
复制代码
我希望重定向输出的file文件中的内容是以上内容,即包含前后带路径的那两行。cmd窗口是否显示信息则不作限制。

还有一种情况,就是用户前面已经执行了外部命令,如ftp命令,此时的cmd窗口实际是处于ftp命令模式下,此时不知道能不能也做到像前面那样的重定向?或者其它变通的方法把需要的内容输出到file中?例子如下:
  1. C:\>ftp xxx.xxx.xxx.xxx             //用户的第一个命令,command1
  2. Connected to xxx.xxx.xxx.xxx.
  3. 220 (vsFTPd 2.0.1)
  4. User (xxx.xxx.xxx.xxx:(none)): test      //command2
  5. 331 Please specify the password.
  6. Password:                                          //command3
  7. 230 Login successful.
  8. ftp> ls                                                 //command4
  9. 200 PORT command successful. Consider using PASV.
  10. 150 Here comes the directory listing.
  11. file1
  12. file2
  13. file3
  14. 226 Directory send OK.
  15. ftp: 收到 76 字节,用时 0.00Seconds 76000.00Kbytes/sec.
  16. ftp> bye                                                    //command5
  17. 221 Goodbye.
  18. C:\>
复制代码
其中每两个command之间的内容必须输出到单独的文件中,以方便在WEB呈现。如command1对应的文件内容应该是
  1. C:\>ftp xxx.xxx.xxx.xxx             //用户的第一个命令,command1
  2. Connected to xxx.xxx.xxx.xxx.
  3. 220 (vsFTPd 2.0.1)
  4. User (xxx.xxx.xxx.xxx:(none)):
复制代码
本人对dos了解不多,还请高手指点一下。能实现第一个要求就好了,能实现第二个要求那就十分好了。先谢谢了!

(本人初来,不知道这样发贴合不合规范。如有任何不妥的地方请版主指出。对问题如有描述不清楚的也请告知。)

[ 本帖最后由 imchpy 于 2008-12-3 17:28 编辑 ]

先说你的第一个问题
你的例子中 rasdial test 是手动输入的吗?
如果是就用最原始的办法可以解决
不知是不是下面的意识?
  1. @echo off&cls
  2. echo 请输入命令
  3. set /p var=
  4. echo %cd%^>%var%>file.txt
  5. %var% 1>>file.txt 2>&1
  6. echo %cd%^> >>file.txt
  7. start "" "file.txt"
复制代码
第二个问题没看懂。
技术问题请到论坛发帖求助!

TOP

谢谢楼上的回答!
第一个问题中,命令是由第三方程序输入的,输入的时候也会自动加入回车,所以命令会自动运行。
你的程序能解决一部分问题,但仍有不足。提示符虽然默认是">"号,但也有可能是其它符号,所以不能写死在程序中。而且在提示符前面的不一定就是系统的路径,如果已经打开了第三方程序,如ftp命令,那么在提示符前面的就是 ftp>  ,而不是 %CD%> 了。

TOP

我也不清楚是不是这个意思,会有三行 “废品”,自己处理处理。
多个同时运行时,重定向到不同文件就行了。
  1. @echo.>log.txt 2>&1 3>&1 4>&1
  2. :mlh
  3. set/p var=
  4. %var%
  5. goto :mlh
复制代码
重定向参阅 “罗嗦文”
重定向中的秘密(句柄备份)
http://bbs.bathome.net/thread-2579-1-1.html

[ 本帖最后由 wxcute 于 2008-12-3 20:54 编辑 ]

TOP

谢谢楼上的朋友!我再试试吧。

TOP

返回列表