[问题]如何截取cmd的文字,转存至文字档?

楼主: weakstudy (台湾高阶管理人)   2016-06-30 13:12:24
如标题所问,
小弟有个"别人"写好的程式码,
执行它的时候,
它会自动叫起一个cmd来显示执行过程及结果,
但因为cmd如果输出太多的话,
前面的资讯就会被"吃"掉(或者说看不见),
所以想问说有没有Java可以在这个cmd执行的时候,
可以把文字也转存成txt呢?
或是有其他软件做的到呢?
谢谢各位高手的赐教!
楼主: weakstudy (台湾高阶管理人)   2016-07-04 09:31:00
谢谢各位高手给的提示,小弟会试试!又来发问 … 这些方法好像都不行 ~"~
作者: omidofor (妈妈咪呀)   2016-06-30 13:18:00
class Process 操作standard input
楼主: weakstudy (台湾高阶管理人)   2016-06-30 13:37:00
可是那个自动叫起的cmd并不能下任何指令,这样的话,要怎么运用您的方法来操作呢?请赐教!也不能用cmd重新导向的方法
作者: omidofor (妈妈咪呀)   2016-06-30 13:56:00
你的意思是你要对它下指令吗?是的话用standard output
作者: mars90226 (火星人)   2016-06-30 14:06:00
估狗Java pipe应该就有答案
楼主: weakstudy (台湾高阶管理人)   2016-06-30 14:08:00
我的意思是…那个cmd视窗我完全不能控制…但是它会产生很多讯息,而讯息一多,前面的讯息就看不见,所以我想要把它的讯息"全部"存进文字档,不知道做的到吗?
作者: cowbaying (是在靠北喔)   2016-06-30 14:46:00
用log...
作者: gameking (GK草祭)   2016-06-30 14:57:00
你是要改别人写好的程式码还是要另外写一个程式去做撷取
楼主: weakstudy (台湾高阶管理人)   2016-06-30 15:09:00
另外写一个程式去撷取
作者: LaPass (LaPass)   2016-06-30 15:28:00
这样喔.... 那就只能写个键盘精灵之类的东西去撷取萤幕了然后把萤幕上的字用影像识别去转换成文字或是你想办法去修改那个自动跑起来的cmd,然后把输出导到纯文字,如果是linux系统,就用 java xxxxxxx > log.txt之类的。windows我不熟,但应该也有类似的方法
楼主: weakstudy (台湾高阶管理人)   2016-06-30 15:49:00
就是因为那个cmd是它自已叫起来执行的,这才麻烦!
作者: bitlife (BIT一生)   2016-06-30 20:47:00
除非程式主动改导向,standard out file descriptor会继承所以在最上层的母程式做输出导向,那个自动被叫的cmd的输出也会被导到最上层的输出导向档案去
楼主: weakstudy (台湾高阶管理人)   2016-06-30 21:05:00
所以才想要用Java(或其他程式语言、软件)撷取出cmd里的文字
作者: ripple0129 (perry tsai)   2016-06-30 22:27:00
cmd可以调缓冲区大小
作者: bitlife (BIT一生)   2016-06-30 22:47:00
我和原po好像有点鸡同鸭讲.我这样问,别人写的程式(假设叫a.exe)最开始是怎么被执行的?假设a.exe是console程式,桌面有图示,double click执行,就产你描述的现象.如果我上面推测正确,你先开个cmd视窗,手动执行 <path-to-a.exe>/a.exe > c:\out.txt 这样就会达成你希望把输出转到out.txt的目的了   <path-to-a.exe>\a,exe
楼主: weakstudy (台湾高阶管理人)   2016-07-01 13:56:00
回答大大 … double click后执行的是先跳出一个视窗,然后才又叫出cmd视窗,一共是叫出两个视窗,所以小弟才不知道该怎么处理第二个跳出的cmd视窗!
作者: omidofor (妈妈咪呀)   2016-07-01 14:33:00
我又看了几次原文,还是无法理解你想表达的是上面的意思
楼主: weakstudy (台湾高阶管理人)   2016-07-01 15:28:00
= =" 对不起,总之就是有办法把cmd视窗里显示的文字,自动读取后,写入文字档吗?但不能使用转导向的方法,有高手有任何方法吗?
作者: pico2k (风月)   2016-07-01 18:14:00
在win32平台,可以用API Hook的方法取得文字,请自行googlegoogle "win32 console hook"
作者: bitlife (BIT一生)   2016-07-01 23:52:00
你有照我说的,先开cmd,再下指令去执行 a.exe (对应到你的第一个double click的执行档)?如果希望视窗本身也留下显示,在*nix系统一般是pipe给tee再写到档案找win32版的tee理论上可以
作者: iFEELing (ing)   2016-07-02 11:36:00
貌似那个a.exe会自己再CALL一个CMD起来跑 这样PIPE有效?
作者: bitlife (BIT一生)   2016-07-02 13:29:00
正常会有效,因为file descriptor会一直被child process继承,只要child也是console程式,理论上ok的当然如果程式有处理把child process的file descriptor转向,那就没效了.反正试看看不吃亏刚想了一下,会跳出新视窗这点有可能是不行,这代表controlterminal(*nix术语)换了,标准输出入就和最上代不同了
作者: PttTime   2016-07-02 20:06:00
window也可以 > 2>&1
作者: cha122977 (CHA)   2016-07-03 13:27:00
直接转存: xxx >> log.txt显示同时转存: xxx | tee log.txt

Links booklink

Contact Us: admin [ a t ] ucptt.com