Следующая методика просто сохраняет имена родительских каталогов как переменную, а затем проверяет это по сравнению с предыдущим значением, чтобы определить, следует ли Echo
it:
@SetLocal DisableDelayedExpansion
@For %%G In (PDir PPDir)Do @Set "%%G="
@For /F "Delims=" %%G In ('""%__AppDir__%Sort.exe" "mytextfile.txt" 2>NUL"'
)Do @(Set "PDir=%%~dpG"
SetLocal EnableDelayedExpansion
If /I Not "!PPDir!"=="!PDir!" Echo Directory - "!PDir:~,-1!"
EndLocal
Echo Filename - "%%~nG"
Set "PPDir=%%~dpG")
@Pause
@EndLocal
Это не проверено, но я бы ожидайте, что его вывод будет выглядеть так:
Directory - "Z:\Folder 1"
Filename - "filename 01"
Filename - "filename 02"
Directory - "Z:\Folder 2"
Filename - "filename 01"
Filename - "filename 02"
Filename - "filename 03"
Directory - "Z:\Folder 3"
Filename - "filename 01"
Вы заметите, что я использовал sort
, чтобы сначала убедиться, что любое повторение путей в любом месте текстового файла будет возвращено вместе.
Если вы не хотите использовать sort
, то этого должно быть достаточно:
@Echo Off
Title Outputting directories and their files from a file list
Color 5F
SetLocal DisableDelayedExpansion
Set "ITF=%Temp%\music-checker-list.txt"
For /F "Tokens=*" %%G In ('ChCp') Do For %%H In (%%G) Do Set "CCp=%%~nH"
If Not %CCp% Equ 65001 ChCp 65001 >NUL
For %%G In (PDir PPDir)Do @Set "%%G="
For /F "UseBackDelims=" %%G In ("%ITF%")Do (Set "PDir=%%~dpG"
Set "NFile=%%~G"
SetLocal EnableDelayedExpansion
If /I Not "!PPDir!"=="!PDir!" Echo Directory - "!PDir:~,-1!"
Call :Process_Files "!NFile!"
EndLocal
Set "PPDir=%%~dpG")
Pause
GoTo :EOF
:Process_Files
Echo Full file name - %1
Exit /B
Ответ выше был скорректирован для того, чтобы измененный список имен и последующий код раздела редактирования были в вашем собственном коде. при условии правильного ответа обрабатывают амперсанды и проценты.