6

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

谢谢!

4

5 回答 5

13

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

dir | findstr /vi ".pdf"

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

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

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

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

附录:

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

dir | findstr /vi "\.pdf$"

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

于 2009-05-07T14:38:53.430 回答
3

您可以将 dir 与 findstr 结合起来,几乎可以做您想做的事情:

dir * | findstr /vi .pdf

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

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

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

无论您尝试什么,祝您好运 :) DOS 很“有趣”。

于 2009-05-07T14:39:30.353 回答
0

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

属性 *.bad +H
dir /oE
属性 *.bad -H

这会影响隐藏您不想显示的内容,执行目录然后取消隐藏它们。我必须承认它有点讨厌,但它似乎确实起到了作用。

于 2009-05-07T15:01:59.300 回答
0

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

dir | find/V ".pdf"

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

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

于 2013-01-10T17:31:25.143 回答
0

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

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

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

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

于 2014-11-17T07:53:29.470 回答