在 MS-DOS 中,如果我输入dir *.pdf
,我会得到一个目录中的所有 PDF 文件。有没有办法获取除PDF 文件之外的所有内容?像dir !*.pdf
什么?
谢谢!
我认为 findstr 有一个 /v 选项,它等效于 grep -v (包括所有不包含文本的行。所以我会看:
dir | findstr /vi ".pdf"
语法可能略有不同,我没有太多需要使用它,而且我不在当前位置运行 Windows。
使用 findstr /? 从命令提示符获取详细信息。
或者,如果你安装了 CygWin(我为这类东西选择的工具),你可以只使用 grep 本身:
ls -al | grep -vi '\.pdf$'
附录:
我实际上没有意识到这一点,但显然 findstr 也支持正则表达式,因此您可以使用:
dir | findstr /vi "\.pdf$"
和 grep 一样(我没有测试过,我只是在TechNet上找到的,所以你需要自己测试一下)。
您可以将 dir 与 findstr 结合起来,几乎可以做您想做的事情:
dir * | findstr /vi .pdf
但请注意,如果文件名为 my.pdf.converted.txt,则会在此处错误地丢弃。
如果您真的想花哨,这里有一个完全正确的版本,更适合批处理脚本:
for /f %a in ('dir /b *') do @if "%~xa" neq ".txt" echo %a
无论您尝试什么,祝您好运 :) DOS 很“有趣”。
我知道它已经为您工作了,但是您可以像这样使用大多数版本的 DOS(至少我记得的那些)来做到这一点。
属性 *.bad +H
dir /oE
属性 *.bad -H
这会影响隐藏您不想显示的内容,执行目录然后取消隐藏它们。我必须承认它有点讨厌,但它似乎确实起到了作用。
在 MS-DOS 或 CMD 中,您只需键入以避免 pdf 文件:
dir | find/V ".pdf"
但请记住,输出底部的文件数将包括 pdf 文件。
此外,您还可以将此命令用于其他扩展名,方法是将“.pdf”替换为“.xxx”,其中 xxx 是任何扩展名。
这是一种不使用 findstr/find 或管道到另一个命令的简单方法:
for %%a in (*) do (
if not exist %%~Na.pdf echo %%a
)
基本上 for 循环将遍历所有文件。“如果不存在”将确保不打印 *.pdf 文件
%%~Na 表示使用不带扩展名的 %%a 变量的文件名。