(AutoHotkey)(複数のファイルマッチパターンにマッチするファイルの中から 一つ ランダムにファイルを選ぶ 編)
あえて 二回走査する所が ミソかな? 笑)
もちろん パターン文字列は いちいち 複数行に分けて 書く必要も無いです
いきなり 文字列でぶっ続けて書いて 引数に ぶち込んでも ちゃんと 改行区切り( `nで区切られている) になってれば OKです
あと 最後の マッチパターンの行末には 改行コードは不要です、 まぁ付けてしまっても 誤動作はしないようには 一応考慮してます
もちろん マッチパターンが複数個 必要無い時は
[]; RandomFileSelect(FileMatchPatterns) ファイルマッチパターンにマッチするファイルの中から 一つをランダムに選ぶ[] []; 複数個の ファイルマッチパターンを指定する場合は 「改行区切り」で指定する[] []RandomFileSelect(FileMatchPatterns)[] []{[] [] Count := 0[] [] Loop, Parse, FileMatchPatterns, `n[] [] {[] [] If ( A_LoopField == "" )[] [] Break[] [] Loop, %A_LoopField%[] [] Count++[] [] }[] [] Random, RandomIndex, 1, %Count%[] [] Count := 0[] [] Loop, Parse, FileMatchPatterns, `n[] [] {[] [] Loop, %A_LoopField%[] [] {[] [] Count++[] [] If ( Count == RandomIndex )[] [] Return A_LoopFileLongPath[] [] }[] [] }[] [] Return ""[] []}[]例えば、 マッチさせたいパターンが
[]d:\Data\Pictures\*.jpg[] []d:\Data\Pictures\*.jpeg[] []d:\Data\Pictures\*.bmp[] []e:\Data\Pictures\*.jpg[]だったりしたら
Patterns := "d:\Data\Pictures\*.jpg`n" Patterns .= "d:\Data\Pictures\*.jpeg`n" Patterns .= "d:\Data\Pictures\*.bmp`n" Patterns .= "e:\Data\Pictures\*.jpg" MsgBox,% RandomFileSelect(Patterns)こんな感じになります
もちろん パターン文字列は いちいち 複数行に分けて 書く必要も無いです
いきなり 文字列でぶっ続けて書いて 引数に ぶち込んでも ちゃんと 改行区切り( `nで区切られている) になってれば OKです
MsgBox,% RandomFileSelect("d:\Data\Pictures\*.jpg`nd:\Data\Pictures\*.jpeg`nd:\Data\Pictures\*.bmp`ne:\Data\Pictures\*.jpg")ですね、 ただ 可読性を上げるには 区切って書いていったほうがいいかな?、 不慮の間違いも減りますしね
あと 最後の マッチパターンの行末には 改行コードは不要です、 まぁ付けてしまっても 誤動作はしないようには 一応考慮してます
もちろん マッチパターンが複数個 必要無い時は
MsgBox,% RandomFileSelect("d:\Data\Pictures\*.jpg")で OKです