【问题标题】:DOS: Directory listing that excludes a file type?DOS:不包括文件类型的目录列表?
【发布时间】:2009-05-07 14:31:39
【问题描述】:

在MS-DOS 中,如果我输入dir *.pdf,我会得到一个目录中的所有PDF 文件。有没有办法获取所有 PDF 文件? dir !*.pdf 之类的东西?

谢谢!

【问题讨论】:

    标签: dos


    【解决方案1】:

    我认为 findstr 有一个 /v 选项,它等效于 grep -v (包括所有 包含文本的行。所以我会看:

    dir | findstr /vi ".pdf"
    

    语法可能略有不同,我没有太多需要使用它,而且我不在当前位置运行 Windows。

    使用 findstr /?从命令提示符获取详细信息。

    或者,如果你安装了 CygWin(我为这类东西选择的工具),你可以只使用 grep 本身:

    ls -al | grep -vi '\.pdf$'
    

    附录:

    我实际上没有意识到这一点,但显然 findstr 也支持正则表达式,因此您可以使用:

    dir | findstr /vi "\.pdf$"
    

    和 grep 一样(这个我没测试过,我只是在TechNet上找到的,所以你需要自己测试一下)。

    【讨论】:

    • 谢谢,@Andrew,我真的不想为了测试它而启动 VMWare Player :-)
    【解决方案2】:

    你可以将 dir 和 findstr 结合起来做你想做的事:

    dir * | findstr /vi .pdf
    

    但请注意,如果文件名为 my.pdf.converted.txt,则会在此处错误地丢弃。

    如果你真的想花哨,这里有一个完全正确的版本,更适合批处理脚本:

    for /f %a in ('dir /b *') do @if "%~xa" neq ".txt" echo %a
    

    祝你好运:) DOS 很“有趣”。

    【讨论】:

    • 幸运的是,我没有处理像您的“pdf.converted.txt”示例这样的技巧。不过不错!
    • findstr in XP 告诉我它可以很好地处理正则表达式,以通常的方式匹配行尾
    【解决方案3】:

    我知道它已经为你工作了,但你可以像这样使用大多数版本的 DOS(至少我记得的那些)来做到这一点。

    属性 *.bad +H
    目录 /oE
    属性 *.bad -H

    这会影响隐藏您不想显示的内容,执行目录然后取消隐藏它们。我必须承认它有点讨厌,但它似乎确实可以解决问题。

    【讨论】:

      【解决方案4】:

      在 MS-DOS 或 CMD 中,您只需键入即可避免 pdf 文件:

      dir | find/V ".pdf"
      

      但请记住,输出底部的文件数将包括 pdf 文件。

      此外,您还可以将此命令用于其他扩展名,方法是将“.pdf”替换为“.xxx”,其中 xxx 是任何扩展名。

      【讨论】:

        【解决方案5】:

        这是一种不使用 findstr/find 或管道到另一个命令的简单方法:

        for %%a in (*) do (
            if not exist %%~Na.pdf   echo %%a
        )
        

        基本上 for 循环将遍历所有文件。 “如果不存在”将确保不打印 *.pdf 文件

        %%~Na 表示使用不带扩展名的 %%a 变量的文件名。

        【讨论】:

          猜你喜欢
          • 2011-12-17
          • 1970-01-01
          • 2012-07-08
          • 2021-03-30
          • 2011-12-08
          • 1970-01-01
          • 2012-02-18
          • 1970-01-01
          相关资源
          最近更新 更多