[英]How do I find a pattern and rename the file inserting a character between 2 parts of the matching pattern in the filename using prename?
[英]Execute a file using a pattern as the filename
作為我的應用程序的一部分,我需要使用戶能夠執行我的應用程序中的文件(視頻),但問題是該應用程序未在應用程序本身中的任何位置存儲這些文件的列表,並且該信息是唯一已知的信息。關於文件的信息是文件所在的目錄,並且必須匹配特定的模式,如下所示: * - Ep[0-99] - *
其中*
字符表示任何長度的字符串,整數,unicode字符等和Ep
& -
是字符串文字,最后[0-99]
是0到99之間的任何整數值。
對於正則表達式來說,這聽起來似乎是一項完美的工作,但是問題在於正則表達式需要先與字符串進行匹配才能找到匹配項,並且如前所述,應用程序不會將此字符串存儲在任何地方,因此使用RegEx將無法正常工作除非我首先使用FindFirst
函數之類的東西來搜索文件所在的目錄,然后對其進行遍歷,然后將每個文件名加載到RegEx可以匹配的變量中,但是我寧願避免這樣做是更好的選擇。
我也研究了MatchesMask
函數來完成此任務,但是它也遇到了使用正則表達式的問題,因此,我希望能獲得一些建議或替代上面已經提到的方法的問題。
枚舉目錄的內容無可避免。 如果出於某種未知原因必須避免這種情況,那么您唯一剩下的選擇就是猜測文件名。 如果希望找到所有文件,則需要嘗試所有與模式匹配的文件名。 那是很難處理的。 太多了。
這使我們回到FindFirst
或其他目錄枚舉方案。 我個人將直接使用FindFirst
。 調用簡單,效率高。 用偽代碼:
retval := FindFirst(TPath.Combine(dir, '*'),
faAnyFile and not faDirectory, searchRec);
if retval = 0 then
try
repeat
filename := TPath.Combine(dir, searchRec.Name);
if MatchesRegex(filename) then
DoStuff(filename);
until FindNext(searchRec) <> 0;
finally
FindClose(searchRec);
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.