Windows cmd或powershell获取所有子目录

Windows cmd或powershell获取所有子目录,windows,powershell,cmd,Windows,Powershell,Cmd,我正在尝试找出可以使用哪个cmd或powershell命令来获取目录中包含的子目录。我只需要列出每个目录中的最后一个子目录,例如,如果我有如下内容: matthew\folder1\folder2\folder3 folder1 folder1\folder2 folder1\folder2\folder3 folder6 . . . 及 我在“matthew”目录中,我只想返回以下列表: folder1\folder2\folder3 folder6\folder7\folder8

我正在尝试找出可以使用哪个cmd或powershell命令来获取目录中包含的子目录。我只需要列出每个目录中的最后一个子目录,例如,如果我有如下内容:

matthew\folder1\folder2\folder3
folder1

folder1\folder2

folder1\folder2\folder3

folder6
.
.
.

我在“matthew”目录中,我只想返回以下列表:

folder1\folder2\folder3
folder6\folder7\folder8
我尝试使用
dir/b/s
,但它给了我类似的东西:

matthew\folder1\folder2\folder3
folder1

folder1\folder2

folder1\folder2\folder3

folder6
.
.
.

任何帮助都将不胜感激。

编辑以减少处理时间

@echo关闭
setlocal enableextensions disabledelayedexpansion
subst::。
对于/r::\“%%a在(.)do中(
设置“叶=1”
对于(“%%~fa\*”)中的/d%%b,如果定义了叶集“叶=”
如果在(“%%~fa”)中为/f“tokens=*delims=:\”%%b定义了叶,则执行echo%%b
)
subst::/d
有两个问题:确定要显示哪些文件夹,并从输出中删除前缀

要解决第一个问题,将枚举当前文件夹下的文件夹结构,并对找到的每个文件夹测试其中是否有文件夹。如果没有子文件夹,则需要回显当前文件夹


要解决第二个问题,所有操作都在subst驱动器下完成。当前文件夹被定义为
驱动器的根目录。这样,当前文件夹的完整路径将从要输出的字符串中删除,替换为一个简单的
:\
,当必须回显文件夹时,将使用正确配置的
for/f
命令删除该路径。

编辑以减少处理时间

@echo关闭
setlocal enableextensions disabledelayedexpansion
subst::。
对于/r::\“%%a在(.)do中(
设置“叶=1”
对于(“%%~fa\*”)中的/d%%b,如果定义了叶集“叶=”
如果在(“%%~fa”)中为/f“tokens=*delims=:\”%%b定义了叶,则执行echo%%b
)
subst::/d
有两个问题:确定要显示哪些文件夹,并从输出中删除前缀

要解决第一个问题,将枚举当前文件夹下的文件夹结构,并对找到的每个文件夹测试其中是否有文件夹。如果没有子文件夹,则需要回显当前文件夹


要解决第二个问题,所有操作都在subst驱动器下完成。当前文件夹被定义为
驱动器的根目录。这样,当前文件夹的完整路径将从要输出的字符串中删除,替换为一个简单的
:\
,当必须回显文件夹时,将使用正确配置的
for/f
命令删除该路径。

仍然难以理解您要查找的内容

您需要当前文件夹下没有任何子文件夹的所有文件夹的列表。此外,您只希望显示当前路径未指定的路径部分

有关Powershell的答案:

Get-ChildItem -Directory -Recurse | Where-Object { 
    (Get-ChildItem $_.FullName -Directory).Count -eq 0;
} | ForEach-Object { 
    Write-Output $_.FullName.SubString((Get-Location).Path.Length);
}

请注意,如果我没记错的话,
-Directory
开关需要Powershell 3.0。

仍然难以理解您在寻找什么

您需要当前文件夹下没有任何子文件夹的所有文件夹的列表。此外,您只希望显示当前路径未指定的路径部分

有关Powershell的答案:

Get-ChildItem -Directory -Recurse | Where-Object { 
    (Get-ChildItem $_.FullName -Directory).Count -eq 0;
} | ForEach-Object { 
    Write-Output $_.FullName.SubString((Get-Location).Path.Length);
}
注意
-Directory
开关需要Powershell 3.0,如果我没记错的话。

@ECHO OFF
SETLOCAL
::仅显示叶
设置“sourcedir=U:\sourcedir”
对于(*)中的/r“%sourcedir%”/d%%a,请执行以下操作(
设置“flag=Y”
对于(“%a\*”)中的/d%%b,请设置“标志=”
如果已定义标志ECHO%%a
)
)
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

这对我很有效。

@ECHO OFF SETLOCAL ::仅显示叶 设置“sourcedir=U:\sourcedir” 对于(*)中的/r“%sourcedir%”/d%%a,请执行以下操作( 设置“flag=Y” 对于(“%a\*”)中的/d%%b,请设置“标志=” 如果已定义标志ECHO%%a ) ) 后藤:EOF 您需要更改
sourcedir
的设置以适应您的环境


这对我很有用。

folder1
folder2
folder3
folder8
一样有效。他们怎么了?是否只需要列出“叶”目录(不包含其他目录的目录)或某一级别下的目录?
folder1
folder2
folder3
folder8
一样有效。他们怎么了?是否只需要列出“叶”目录(不包含其他目录的目录)或某个级别下的目录?