@echo off
setlocal disabledelayedexpansion
set "lastdir="
( for /r %%A in (*.js) do (
set "nextdir=%%~dpA"
setlocal enabledelayedexpansion
if /i not "!lastdir!" == "!nextdir!" (
rem Empty line and directory path.
if defined lastdir @echo(
@echo !nextdir!
)
endlocal
rem Filename.
@echo %%~nxA
set "lastdir=%%~dpA"
)
) > "names.txt"
Переменная lastdir
предназначена для записи последнего пути к каталогу, поэтому он отображается только один раз.
Если lastdir
отличается от %%~dpA
:
- Если определено
lastdir
, то будет отображаться пустая строка. - Путь к каталогу найденного файла отображается.
Имя файла всегда отображается.
for
модификаторы dp
- это диск и путь. nx
- это имя и расширение.
setlocal enabledelayedexpansion
используется только там, где это необходимо, поэтому пути с !
не уязвимы.
Я не собираюсь предлагать решение для командной строки, так как это было бы очень долго. Вместо этого предложите использовать команду tree
, если формат вывода подходит.