2014-02-07 34 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名單,但標籤更換\並忽略當前目錄」 - 但是這簡單的方案不會產生相同的序列......

(我還更換了標籤與/,使其更容易看到,標籤不是特別明顯,所有) - 只需選擇一個適合角色的事情......

+0

這個作品真的很棒!非常感謝。我想知道爲什麼GOTO:eof是必要的?當談到腳本編寫時,我仍然是一個新手,但是該行的目的是什麼。 – 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 
) 
相關問題