[問題]如何截取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