Windows 等效于 ls *(星号)目录通配符?

Windows 等效于 ls *(星号)目录通配符?

另一个问题来自一位长期使用 Unix/Linux 的用户,他发现自己身处 Windows 世界。首先,让我准确解释一下我要做什么。我正在使用 Windows cmd.exe shell,我想列出当前目录下包含 bin\Debug 层次结构的所有目录,并确定它们是否包含任何文件(例如:尝试弄清楚我的 NAnt clean 目标是否正常工作)。我的层次结构可能看起来像这样:

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

在 Unix 中,ls */bin/Debug只会给我一个 中所有内容的列表DirA/bin/Debug,并向我显示 为空的事实DirB/bin/Debug。我在 cmd shell 中尝试了不同的方法,但总是得到类似这样的结果:

    > 目录 *\bin\Debug
    文件名、目录名或卷标语法不正确。

    > 目录 *\*\*
    文件名、目录名或卷标语法不正确。

关于 dir 命令是否存在一些我不明白的微妙之处,或者它只是在这方面受到限制?

是的,我意识到我可以切换到资源管理器,导航,右键单击,并最终制作一个可以按照我想要的方式进行的搜索,但我对快速而肮脏的命令行解决方案更感兴趣。

答案1

类似这样的操作应该可以满足您的要求。在项目根目录中输入:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

Dir 参数:/s - 递归,/b - “裸”,无额外信息
findstr 参数:/i - 忽略大小写

总的来说,“帮助命令' 将显示 shell 命令的帮助。如果不起作用,那么
'命令/?' 一般会显示帮助。

答案2

Windows 不像 Linux 那样使用通配符。只有文件名部分可以包含通配符。

您可以下载适用于 Windows 的 ls 版本并使用它。我使用过赛格威,但我确信还有其他的。

答案3

@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

不太好,但应该可以工作。您也可以将其放入 .cmd 文件中(然后将每个单个 % 替换为双 %%)。或者使用 doskey 定义宏(是的,它仍然存在)。

确保 cmd 扩展已启用。

编辑:怎么运行的:

第一个 for 循环迭代遍历所有子目录(/D 和 /r 开关)。%~fP 扩展为该目录的完整路径。然后,它将 \bin\Debug* 附加到该路径。第二个 for 循环枚举所有匹配的文件。%~ftzaQ 扩展为每个匹配的文件并通过 echo 打印到屏幕上。奇怪的 %~ftzaQ 将其格式化为目录输出。@ 字符避免将命令本身打印在屏幕上。

有关详细信息,请参阅

答案4

您可以执行类似“dir /s *.obj *lib”的操作。它会在最后给出匹配文件数量的摘要。

相关内容