目录和子目录列表

目录和子目录列表

我试图列出目录名称(仅名称,不是完整路径)和其中的子目录(仅名称,不是完整路径)。子目录只有一层。我使用以下脚本来执行此操作:

@echo off&setlocal enableextensions

for /r  "PATH" %%G in (.) do (
Pushd %%G
for %%* in (.) do set MyDir=%%~n*
echo %MyDir% 
popd
)
endlocal&goto :eof

上述脚本的问题在于它显示了带有完整路径的根目录。我怎样才能让它只显示与我正在工作的目录相关的目录?

答案1

相信您只想要一个级别的子文件夹:

@echo off
for %%A in ("yourRootPath\*") do for /d %%B in ("%%~A\*") do echo %%~nxA\%%~nxB

如果您的根路径作为批处理参数传递,那么解决方案就更简单了

@echo off
for /d %%B in ("%~1\*") do echo %~nx1\%%~nxB

答案2

您可以使用:

for %f in ("C:\Some\Path\Like\This") do echo "%~nf"

仅显示:

"This"

如果它是这样的根:

for %f in ("C:\") do echo "%~nf"

它将显示没有什么喜欢:

""

但你说:

上述脚本的问题是它显示了带有完整路径的根目录。

您的意思是,例如,当在驱动器的根目录下运行时它会显示:

C:\
  or
\

它实际上显示什么,如果是根目录,您想显示什么?我猜应该是没有什么(空),但这可能不是您想要的。

请告诉我您对这个案例的要求,我会看看是否可以修复您的批处理文件。

编辑:

我猜你所说的“根”是指你开始搜索的目录。我以为你的意思是在驱动器根目录(如“C:\”)中运行批处理文件。

这个批处理文件应该可以执行您想要的操作...

如果将其保存到名为的文件:

getdirname.cmd

然后你可以像这样运行它:

getdirname.cmd "C:\Some\PATH"
getdirname.cmd C:\Some\PATH

如果你在没有任何参数的情况下运行它,如下所示:

getdirname.cmd

它将使用当前目录作为起点。

这是批处理文件:

@echo off


set "zstartpath=%~1"
if "%zstartpath%."=="." set "zstartpath=."


for %%f in ("%zstartpath%") do set "zfullpath=%%~dpnxf\"


for /r "%zfullpath%" %%f in (.) do call :work "%%~f"

set "zdfname="
set "zdp="
set "zdpath="
set "zfullpath="
set "zstartpath="
set "ztarget="

goto :EOF



:work

set "ztarget=%~1"

for %%g in ("%ztarget%") do set "zdpath=%%~dpnxg"

for %%g in ("%zdpath%") do set "zdfname=%%~nxg"

echo "%zdfname%"

goto :EOF

我有一个如下的目录结构:

C:\Some\PATH
C:\Some\PATH\aaa
C:\Some\PATH\bbb
C:\Some\PATH\ccc

如果我登录到(CD),路径:

C:\Some

然后我像以下任何一种方法一样运行 getdirname:

getdirname C:\Some\PATH
getdirname C:.\Path
getdirname C:Path
getdirname .\Path
getdirname Path

输出结果如下:

"PATH"
"aaa"
"bbb"
"ccc"

如果我像这样运行 getdirname:

getdirname C:
getdirname .
getdirname .\

输出结果如下:

"Some"
"PATH"
"aaa"
"bbb"
"ccc"

如果我像这样运行 getdirname:

getdirname \
getdirname C:\

并运行批处理文件,输出将如下所示:

""
"Some"
"PATH"
"aaa"
"bbb"
"ccc"

请告诉我这是否满足您的需要,或者是否需要进行任何“调整”。

相关内容