2014-02-07 4 views
2

я видел скрипты из разных людей, которые предложили код обозначается внизу:Пакетный файл в список файлов и папок с помощью родительских каталогов

@echo off 
    setlocal disableDelayedExpansion 
    pushd %1 
    set "tab= " 
    set "indent=" 
    call :listFolder >report.txt 
    exit /b 

    :listFolder 
    setlocal 
    set "indent=%indent%%tab%" 

    for /d %%F in (*) do (
     echo %indent%%%F 
     pushd "%%F" 
     call :listFolder 
     popd 
    ) 
    for %%F in (*) do echo %indent%%%F 

exit /b 

который выводит:

Folder 1 
    Subfolder 1 
     Filename 1 
    Subfolder 2 
     Filename 1 
Folder 2 
    Subfolder 1 
     Filename 2 
     Filename 2 

Это работало отлично подходит для некоторое время, но мне было интересно, есть ли способ сделать ту же идею, но родительская папка разделена вкладкой.

Folder 1 
Folder 1 Subfolder 1 
Folder 1 Subfolder 1  Filename 1 
Folder 1 Subfolder 2 
Folder 1 Subfolder 2  Filename 1 
Folder 2 
Folder 2 Subfolder 1 
Folder 2 Subfolder 1  Filename 2 
Folder 2 Subfolder 1  Filename 2 

ответ

0
@echo OFF 
SETLOCAL 
pushd %1 
set "tab=/" 
SET "currdir=%cd%" 
call :listFolder >report.txt 
popd 
GOTO :eof 

:listFolder 
setlocal 
for /d %%a in (*) do (
SET "name=%%~fa" 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET name=!name:%currdir%=! 
SET name=!name:\=%tab%! 
ECHO !name! 
ENDLOCAL 
pushd "%%a" 
call :listFolder 
popd 
) 
for %%a in (*) do (
SET "name=%%~fa" 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET name=!name:%currdir%=! 
SET name=!name:\=%tab%! 
ECHO !name! 
ENDLOCAL 
) 

GOTO :eof 

Интересное упражнение.

По существу, отчет становится «сделать dir/s/b список, но заменить \ с Tab и опустить текущий каталог» - но это простая схема не дает ту же последовательность ...

(Я также заменил вкладку с /, чтобы сделать его легче увидеть, что вкладки не является особенно очевидным, и все) - просто вопрос выбора персонажа, который подходит ...

+0

это работает действительно здорово! большое спасибо. Мне интересно, почему GOTO: нужно? Я по-прежнему в значительной степени новичок, когда дело доходит до сценариев, но какова будет цель этой линии. – Shane

+0

Я хотел, чтобы этот способ вместо dir/s/b вызывал теперь, когда я могу положить в таблицу excel и fitler. Позволяет сортировать файлы или находить фотографии в папке, которую я забыл. Но спасибо большое! =) – Shane

+0

Я использую 'goto: eof', чтобы закрыть локальную среду и вернуться. Я полагаю, что 'exit/b' делает то же самое. Томат/томат. – Magoo

0

Другой вариант:

@echo off 
setlocal disableDelayedExpansion 
set "pwd=%~1" 
if "%pwd%"=="" set "pwd=%cd%" 

pushd "%pwd%" 
set "indent= " 
call :listFolder1 "%pwd%" 
exit /b 

:listFolder1 %1 
setlocal 
set curdir=%~1 
for /d %%F in (*) do (
    echo %curdir%%indent%%%F 
    for %%S in (*) do echo %curdir%%indent%%%F%indent%%%S 
    pushd %%F 
    call :listFolder1 "%curdir%%indent%%%F" 
    popd 
) 
Смежные вопросы