[爆卦]批次檔如何擷取txt內的某一段文字是什麼?優點缺點精華區懶人包

為什麼這篇批次檔如何擷取txt內的某一段文字鄉民發文收入到精華區:因為在批次檔如何擷取txt內的某一段文字這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者VElysian (家瑀 致中和)看板EzHotKey標題Re: [討論] 大家想讓電腦有什麼方...


找出資料夾路徑的方法

想了很久,花了一個晚上總算寫出來了。
不過前提是要把那個資料夾打開,然後用 AutoHotKey 去擷取被打開資料夾的路徑。

檔案名稱用這個方式無法擷取,因為即使選取了某個檔案,只能找到檔案的大小。
不過應該可以藉由檔案大小的這個資訊找到那個檔案。

聽說 ListView 之類的指令可以列出檔案。
可能還有其他方法,或許改日再弄看看吧~~

以下是程式碼:

WinGetActiveTitle, title ;將目前視窗的標題放進變數 title
WinGetText, text, %title% ;將標題 title 的視窗資訊放進 text

Loop, Parse, text, `r`n ;將 text 依換行字元('r'n)分開
{
if ( A_Index = 1 ) ;只取分開後的第一部份
{
text2 = %A_LoopField% ;將第一部份的內容放進 text2
break ;離開 Loop, Parse
}
}

FileSelectFile, , ,%text2% , ,(*.*)



教學


要找出某個視窗下的資訊,可以利用 AutoHotKey 內建的 Window Spy 程式。
打開視窗或軟體後,Window Spy 就會出現有關它的資訊唷~~
例如說我現在打開 C槽 資料夾,Window Spy 的畫面就會類似這樣:


ˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍ
Active Window Info
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
本機磁碟 (C:)

……略……

>>>>( TitleMatchMode=slow Visible Text )<<<<
C:\
C:\
……略……
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁




WinGetActiveTitle


其中 Window Title & Class 下面的是目前開啟的視窗的標題。

要獲取這個標題,可以用 WinGetActiveTitle,它可以告訴我們目前使用中視窗的標題:


WinGetActiveTitle, 存放的變數


範例:
^w::
WinGetActiveTitle, title
MsgBox, %title%
return

隨意打開一個資料夾(例如 C槽)然後按下 Ctrl + W,就會出現類似如下的視窗:

___________
AutoHotKey.ahk

本機磁碟 (C:)
_____
確定
 ̄ ̄ ̄ ̄ ̄




WinGetText


而 TitleMatchMode=slow Visible Text 下面的文字就是就是我們要的檔案路徑。
要把這個路徑找出來,需要用到 WinGetText,

WinGetText 可以藉由使用者給它的一些視窗的資訊,然後找到這個視窗,
再擷取這個視窗的資訊,將這些資訊存成一段文字。



用法如下:


WinGetText, 存放變數 ,(視窗標題, 視窗文字
, 不包含的視窗標題, 不包含的視窗文字)




(視窗標題, 視窗文字, 不包含的視窗標題, 不包含的視窗文字)
這四個是 WinGetText 用來尋找視窗的條件,可以只使用一個、兩個甚至全部。

存放變數
WinGetText 找到所需的資訊時,會將這個資訊轉換成文字,然後放到這個變數裡面。


我們如果只要它擷取 C槽 的資訊時,可以這樣寫:

^p:: ;當按下 Ctrl + P 時執行
Run C:\ ;打開C槽
WinWait, 本機磁碟 (C:) ;等待C槽打開再往下執行

WinGetText, Text, 本機磁碟 (C:) ;擷取視窗標題是本機磁碟 (C:)的資訊

MsgBox, %Text% ;將擷取的資訊顯示出來
return ;執行到 return 停止

結果類似:
ˍˍˍˍˍˍˍˍˍ
AutoHotKey.ahk

C:\
C:\
31 個物件
FolderView
_____
確定
 ̄ ̄ ̄ ̄ ̄


因為我們只需要第一行 C:\ ,所以要把其他的部份去掉。
AutoHotKey 提供了 Loop, Parse {...} 可以將一長串文字分開。



Loop, Parse


Loop, Parse, 要處理的變數,( 分開的代表文字, 首尾忽略文字)


要處理的變數:要被分開的變數名稱。
分開的代表文字
例如這個代表文字是 , 符號。
那麼 a,b,c 就會被分成 a 和 b 和 c 。
首尾忽略文字:將變數第一個以及最後遇到的文字忽略。


A_Index: 紀錄 Loop,Parse 目前跑了第幾次,由 1 開始計算。
A_LoopField: 被分開的文字會依順序出現在這個變數當中。

以 a,b,c 來說,
╭─────────┬────┬──────╮
│Loop,Parse跑的次數│ A_Index│ A_LoopField│
├─────────┼────┼──────┤
│ 1 │ 1 │ a │
├─────────┼────┼──────┤
│ 2 │ 2 │ b │
├─────────┼────┼──────┤
│ 3 │ 3 │ c │
├─────────┼────┼──────┤
│ 結束 │ │ │
╰─────────┴────┴──────╯

範例如下:

abc = a,b,c ;建立變數 abc,內容是 a,b,c
Loop, Parse, abc, `, ;將 abc字串以逗號分開(`,
{
MsgBox,%A_Index% 次: %A_LoopField%
}

顯示結果:
___________
AutoHotKey.ahk

第 1 次: a
_____
確定
 ̄ ̄ ̄ ̄ ̄




因為我們找到的字串分成 4 行,所以他們是由換行字元(`r`n)分開的。
因此,要擷取第一行的文字,可以這樣寫:

^p:: ;當按下 Ctrl + P 時執行
Run C:\ ;打開C槽
WinWait, 本機磁碟 (C:) ;等待C槽打開再往下執行
WinGetText, Text, 本機磁碟 (C:) ;擷取視窗標題是本機磁碟 (C:)的資訊

Loop, Parse, Text, `r`n ;將Text用換行字元分開
{
if( A_Index = 1 ) ;若 A_Index = 1 成立,執行 {...}
{
Text2 = %A_LoopField% ;令 A_LoopField 的值給變數 Text2
break ;離開 Loop,Parse
}
}

MsgBox, %Text2% ;將 Text2 的內容顯示出來
return ;執行到 return 停止

結果如下:

___________
AutoHotKey.ahk

C:\
_____
確定
 ̄ ̄ ̄ ̄ ̄




FileSelectFile

如果我們想直接開啟這個路徑下的個檔案,可以用 FileSelectFile


FileSelectFile, 存放變數 , 選項, 絕對路徑\檔名, 標題, 檔案篩選



存放變數:將使用者的檔案名稱丟進這個變數。

選項(可忽略)
M 允許一次選取多個檔案。
S 將“開啟”按鈕改成“儲存”按鈕。
(其他選項請參照說明文件)

絕對路徑\檔名:指定要開啟的資料夾路徑或檔名:
C:\My Pictures\Default Image Name.gif
C:\My Pictures

標題:指定視窗的標題

檔案篩選:指定看得到的檔案類型:
所有(*.*)
文字(*.txt)
音樂(*.wav; *.mp2; *.mp3)
圈圈(*.oo)



例如要打開 C槽 下的檔案,可以這樣寫:

FileSelectFile, tmp, ,C: , 選擇要開啟的檔案, 所有類型(*.*)




※ 引述《sodeass (基米拉)》之銘言:
: ※ 引述《VElysian (家瑀 致中和)》之銘言:
: : 請問大家,
: : 想利用板上討論的軟體,做出什麼樣的功能讓使用電腦更快速方便呢?
: : 或者是已經寫出來了,說出來讓大家開開眼界。
: : 還是已經動手在規劃、在製作了,可以說一說。
: : 如果很需要某項功能,卻想不出來怎麼做;也可以提出來參考。
: : 謝謝。 ^_^
: 小弟有個想法,但自己苦工做很久,還沒啥結果,所以想和大家討論
: 在備份檔案方面,小弟都會check MD5碼來看看二個檔案是否相同
: 因為檔案很多,所以希望這樣...
: 1. 點一下想算MD5碼的檔案, 例如: file1 (也就讓它反白 XD)
: 2. 按熱鍵, 像win+5, 就可以呼叫外部程式,把file1的MD5利用msgbox送出來
: 算MD5碼的部分,不是AHK的守備範圍,所以找外掛就好。
: 問題比較大的一點是,如何AHK,去取得步驟1的file_name 和 file_path
: 小弟自己利用
: FileSelectFile, tmp, 3,C:\Documents and Settings\sodeass\桌面 , Choose File,
: (*.*)
: 開出一個GUI,來選擇檔案,再把檔案路徑丟到變數tmp裡
: 雖然可以得到要的結果,但是要開GUI來慢慢選檔案,速度就比較慢了
: 大家有沒有意見可以給小弟參考一下~ Thx ^^
: 廢話很多,希望有人看得懂 OTZ...

--

主動是機會的誘餌


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.93.191
linpien:這個不推不行啊! 07/25 19:42
※ 編輯: VElysian 來自: 61.64.173.134 (07/25 20:08)
yinjing:推!!改天再讀 XD 07/25 20:21
jyhfang:推你的熱血 XDXD 07/25 20:27
ilovett:推推 07/25 20:28
moonls:這也太強了吧!! 推版主 07/25 22:38
※ 編輯: VElysian 來自: 61.62.148.155 (07/25 23:41)
Kenqr:推! 07/25 23:59

你可能也想看看

搜尋相關網站