Рекурсивное зацикливание файлов на основе расширений
Я пытаюсь пройтись по каталогам, получить файлы, заканчивающиеся определенным расширением, и заполнить соответствующие файлы в текстовом поле. Тем не менее, мой цикл не выполняется. Вот что я придумал:
searchDir = D:\some_directory
^g:: CaptureLoop()
CaptureLoop(){
Loop, Files, %searchDir%\*.xyz, R ; Recurse, get files with .xyz ext
{
MsgBox, loop ; Not reached
SplitPath, %A_LoopFileLongPath%, file_name, dir, ext, name_no_ext, drive
MsgBox, %name_no_ext% ; Populating this field is the goal.
}
}
Я уверен, что мой каталог поиска содержит файлы.xyz. Моя платформа - Windows 7.
Одно из возможных решений
По какой-то причине AHK не может видеть мои строки, если они не находятся внутри функции. Это не похоже на стандартное поведение. Если у вас есть эта проблема, попробуйте переместить переменные внутри функции:
CaptureLoop(){
searchDir = D:\some_directory
Loop, Files, %searchDir%\*.xyz, R ; Recurse, get files with .xyz ext
{ ... }
1 ответ
Решение
Единственные причины, которые я вижу, в том, что
- вы определяете переменную "searchDir" вне секции автозапуска или
- вашему скрипту нужны права администратора для работы.
Попробуйте это как автономный скрипт:
#NoEnv
#SingleInstance Force
; If the script is not elevated, relaunch as administrator and kill current instance:
full_command_line := DllCall("GetCommandLine", "str")
if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
try ; leads to having the script re-launching itself as administrator
{
if A_IsCompiled
Run *RunAs "%A_ScriptFullPath%" /restart
else
Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
}
ExitApp
}
searchDir := "D:\some_directory"
RETURN ; === end of auto-execute section ===
^g:: CaptureLoop()
CaptureLoop(){
Loop, Files, %searchDir%\*.xyz, R ; Recurse, get files with .xyz ext
{
MsgBox, loop
SplitPath, A_LoopFileLongPath, file_name, dir, ext, name_no_ext, drive
MsgBox, %name_no_ext% ; Populating this field is the goal.
}
}