获取所有子目录的cmd或powershell

时间:2014-11-12 15:26:45

标签: windows powershell cmd

我正在试图弄清楚我可以用什么cmd或powershell命令来获取目录中包含的子目录。我只想要列出每个子目录中的最后一个子目录,例如,如果我有类似的东西:

matthew\folder1\folder2\folder3

matthew\folder6\folder7\folder8

我在“matthew”目录中,我只想返回包含以下内容的列表:

folder1\folder2\folder3
folder6\folder7\folder8

我尝试使用dir /b /s,但它给了我类似的东西:

folder1

folder1\folder2

folder1\folder2\folder3

folder6
.
.
.

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

仍然难以理解你在寻找什么。

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

对于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,如果我没记错的话。

答案 1 :(得分:2)

已修改以缩短处理时间

@echo off
    setlocal enableextensions disabledelayedexpansion

    subst :: .
    for /r "::\" %%a in (.) do (
        set "leaf=1"
        for /d %%b in ("%%~fa\*") do if defined leaf set "leaf="
        if defined leaf for /f "tokens=* delims=:\" %%b in ("%%~fa") do echo %%b
    )
    subst :: /d

有两个问题:确定要显示的文件夹并从输出中删除前缀。

要解决第一个问题,将枚举当前文件夹下的文件夹结构,并且对于找到的每个文件夹,如果内部有文件夹,则会对其进行测试。在没有子文件夹的情况下,需要回显当前文件夹。

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

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL
:: Display leaves-only
SET "sourcedir=U:\sourcedir"

FOR /r "%sourcedir%" /d %%a IN (*) DO (
 SET "flag=Y"
 FOR /d %%b IN ("%%a\*") DO SET "flag="
 IF DEFINED flag ECHO %%a
 )
)


GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

这对我有用。