在MS-DOS中,如果我输入dir *.pdf
,我将获取目录中的所有PDF文件。有没有办法获取所有但 PDF文件?像dir !*.pdf
?
谢谢!
答案 0 :(得分:13)
我认为findstr有一个/ v选项,相当于grep -v(包括不包含文本的所有行。所以我会看:
dir | findstr /vi ".pdf"
语法可能略有不同,我没有太多需要使用它,我不在我当前的位置运行Windows。
使用findstr /?从命令提示符获取详细信息。
或者,如果你安装了CygWin(我选择这种东西的工具),你可以使用grep本身:
ls -al | grep -vi '\.pdf$'
<强>附录:强>
我实际上并没有意识到这一点,但显然findtr也支持正则表达式,所以你可以使用:
dir | findstr /vi "\.pdf$"
和grep一样(我没有测试过这个,我只是在TechNet上找到它,所以你需要自己测试一下。)
答案 1 :(得分: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很“有趣”。
答案 2 :(得分:0)
我知道它已经为你工作但是你可以用大多数版本的DOS(至少是我记得的那些)这样做。
Attrib * .bad + H
dir / oE
Attrib * .bad -H
其中有隐藏你不想要显示的那些的影响,做dir然后取消隐藏它们。我必须承认这有点令人讨厌,但似乎确实有这个伎俩。
答案 3 :(得分:0)
在MS-DOS或CMD中,您只需输入以避免使用pdf文件:
dir | find/V ".pdf"
但请记住,输出底部的文件数量将包括pdf文件。
此外,您还可以将此命令用于其他扩展,将“.pdf”替换为“.xxx”,其中xxx是任何扩展名。
答案 4 :(得分:0)
这是一种不使用findstr / find或管道到另一个命令的简单方法:
for %%a in (*) do (
if not exist %%~Na.pdf echo %%a
)
基本上for循环将循环遍历所有文件。 “如果不存在”将确保不打印* .pdf文件
%% ~Na表示使用%%的文件名而不使用其扩展名。