Batch file可列出具有父目录的文件和文件夹
我看到过来自不同人士的脚本,他们建议使用以下代码:Batch file可列出具有父目录的文件和文件夹,file,batch-file,directory,parent,File,Batch File,Directory,Parent,我看到过来自不同人士的脚本,他们建议使用以下代码: @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
@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
@echo关闭
SETLOCAL
推送%1
设置“tab=/”
设置“currdir=%cd%”
调用:listFolder>report.txt
邻苯二胺
后藤:eof
:listFolder
setlocal
对于(*)中的/d%%a,请执行以下操作(
设置“名称=%%~fa”
SETLOCAL ENABLEDELAYEDEXPANSION
集合名称=!名称:%currdir%=!
集合名称=!名称:\=%tab%!
回声!名字!
端部
pushd“%%a”
调用:listFolder
邻苯二胺
)
对于(*)中的%%a,请执行以下操作(
设置“名称=%%~fa”
SETLOCAL ENABLEDELAYEDEXPANSION
集合名称=!名称:%currdir%=!
集合名称=!名称:\=%tab%!
回声!名字!
端部
)
后藤:eof
有趣的练习
从本质上讲,报告变成了“执行目录/s/b
列表,但用Tab替换\
,并省略当前目录”-但这个简单的方案不会产生相同的序列
(我还将tab替换为/
,以使其更易于查看,tab不是特别明显,而且全部)-只需选择一个适合的字符即可…另一个版本:
@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
)
这真的很棒!非常感谢。我想知道为什么必须进行“GOTO:eof”?说到脚本编写,我还是个新手,但这行的目的是什么呢?我希望这样做,而不是dir/s/b,因为现在我可以把它放到excel和fitler表中。使文件排序或在我忘记的文件夹中查找图片变得容易哈哈。但是,是的,非常感谢!=)我使用
goto:eof
关闭本地环境并返回。我想退出/b
也会这样做。西红柿/西红柿。