Running through filesystem directories programatically

I have been struggling to find a solution for an Igor analysis I need to do.

My experimental data are fluorescence spectra that need to be integrated
(through the area function). The data are organized as follows;

1) a root directory within the filesystem whose name is a date string
2) Within this root multiple folders named after the sample measured
3) Within each sample folder exactly four ASCII files containing x-y data representing the fluorescence spectra. Each of these four curves needs to be integrated in a certain range and the four values need to be combined into one datapoint (being the fluorescence anisotropy value). The files that need to be processed each time are *VVA.*, *VHA*.*, *HHA.*, *HVA.*

I would like to point igor to the root directory (the one of a certain date) after which it would have to automatically cycle through all subdirectories present, processing the files in each subfolder. However I do not seem to be able how to achieve this. All I can have it do at the moment is point it to an actual subfolder and process the 4 files in this folder, however, what I would like to do is have it output something like;

Date: Sample1 -> calculated anisotropy value
Date: Sample2 -> calculated anisotropy value
Date: Sample3 -> calculated anisotropy value
...

An example of the input data is attached to this post. The files that need to be processed each time are *VVA.txt, *VHA*.txt, *HHA.txt, *HVA.txt

This would be the result of experimental data in the paths of form C:\Date\Sample*\(four files here)

Is it possible to have Igor run through all subdirectories of a certain
path in the filesystem?

My current code looks like this;
Function CalcAnisotropy(Duplication,Start,Stop,NameWave,WaveCondition,Appendix)
    Variable Duplication
    Variable Start
    Variable Stop
   
    String NameWave
    String WaveCondition
    String Appendix
   
    prompt Duplication, "Keep original wave (1) or overwrite (0):"
    prompt Start, "Start integration at (nm):"
    prompt Stop, "Stop integration at (nm):"
    prompt NameWave, "Select source wave", popup, Wavelist("*", ";", "")
    prompt WaveCondition, "Give match condition for wavename (empty in case of single wave):"
    prompt Appendix, "Appendix for new wave in case of keeping original wave:"
    doprompt "Input parameters", duplication, start, stop, namewave, wavecondition, appendix
    if (V_flag == 1)
        Print "Cancelled by user..."
        return -1
    endif
    variable HH
    variable HV
    variable VH
    variable VV
    variable R
    string wn2
    string wl
    wl= wavelist(Wavecondition, ";","")
   
    NameWave = stringfromlist(0,wl,";")
    Printf NameWave + ": "
    HH = area($NameWave,Start,Stop)
    Print HH
   
    NameWave = stringfromlist(1,wl,";")
    Printf NameWave + ": "
    HV = area($NameWave,Start,Stop)
    Print HV
   
    NameWave = stringfromlist(2,wl,";")
    Printf NameWave + ": "
    VH = area($NameWave,Start,Stop)
    Print VH
   
    NameWave = stringfromlist(3,wl,";")
    Printf NameWave + ": "
    VV = area($NameWave,Start,Stop)
    Print VV
   
    Printf "Anisotropy: "
    R = ((VV*HH)/(HV*VH)-1)/((VV*HH)/(HV*VH)+2)
    Print R
   
end
<\igor>
250608.zip (253.27 KB)
KrisJ: You might take a look at the IndexedFile() function and the GetFileFolderInfo operation. Between the two of those, I believe you should be able to accomplish what you wish.
See the help for the IndexedDir function. It includes an example of recursively traversing directories.