我正在使用wordconv.exe将一堆旧的文档文件转换为docx。 之后我想删除原始文档文件。
当我在命令行上运行"del/S *.doc"时,它会删除文档和docx文件。 无论如何让它只删除.doc文件?
谢谢!
让我们尝试使用这样的东西:
forfiles /s /m *.doc /c "cmd /c del @file"
问题是文件的 8.3 名称很短,因为对于内部cmd
命令和许多外部命令,通配符(*
、?
(也与它们匹配。例如,像important-document.docx
这样的文件有一个短名称,如import~1.doc
,它与*.doc
匹配。
有一些命令以不同的方式处理通配符:
-
forfiles
(正如Michał Mielczarek的回答所证明的那样(:forfiles /S /M "*.doc" /C "cmd /C if @isdir==FALSE del @relpath"
@isdir
查询检查当前项是否为文件,并允许跳过文件夹。 -
where
:for /F "delims=" %%F in ('set "PATHEXT=" ^& where /R "." "*.doc"') do @del "%%~F"
周围的
for /F
循环捕获where
的结果。命令set "PATHEXT="
删除执行where
的cmd
实例中的PATHEXT
变量,因为这也会涉及该变量,因此像important-document.doc.com
这样的文件也可能无意中与默认值PATHEXT
.COM;.EXE;.BAT;.CMD
匹配,例如。尽管
where
方法看起来有点复杂,但您可能更喜欢它,因为它比forfiles
更快,尤其是在拥有巨大的目录树时。
注:
forfiles /M "*.*"
不会匹配没有扩展名的文件(或文件夹((因此请使用/M "*"
匹配类似testfile
的内容(,但where "*.*"
匹配,因此这表明这两个命令具有自己各自的通配符处理/替换例程。
for /f "tokens=*" %%? in ('dir /b /a-d /s *.doc') do if /i "%%~x?"==".doc" del "%%~f?"
您可以在 del 之前添加if exist "%%~dpn?.docx"
,如果 .doc 和.docx位于同一文件夹中。