我正在试图弄清楚我可以用什么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
.
.
.
非常感谢任何帮助。
答案 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
的设置以适合您的具体情况。
这对我有用。