為什麼這篇批次檔如何擷取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