首页 > 解决方案 > 如何递归删除给定路径中的所有文件,但具有特定文件扩展名的文件除外?

问题描述

如果目录名称包含空格字符,例如“相机胶卷”,我在互联网上找到的答案不起作用

我尝试使用 for/dir/findstr 命令,但似乎没有任何效果

批处理文件内容:

@echo off
for /f %%F in ('dir c:\Users\melov\Pictures /s/b/a-d ^| findstr  /v ".jpg"') do echo "%%F"
@echo on

请注意,我将 DEL 命令替换为 ECHO,以便模拟问题。

"c:\Users\melov\Pictures\desktop.ini"
"c:\Users\melov\Pictures\Camera" **(PROBLEM HERE)**
"c:\Users\melov\Pictures\ControlCenter4\Scan\CCF06182019.pdf"
"c:\Users\melov\Pictures\Saved" **(PROBLEM HERE)**
"c:\Users\melov\Pictures\Screenshots\desktop.ini"
"c:\Users\melov\Pictures\Screenshots\Screenshot"
"c:\Users\melov\Pictures\Screenshots\Screenshot"

原始文件夹结构

├───Camera Roll
├───ControlCenter4
│   ├───Email
│   ├───OCR
│   ├───Scan
│   └───SharePoint
├───cunha
├───Saved Pictures
└───Screenshots

我想删除除“.jpg”之外的所有文件

标签: windowsbatch-file

解决方案


cmd有一个默认分隔符是空格,所以你只需告诉它更改默认分隔符。

@echo off
for /f "delims=" %%F in ('dir /b /s /a-d "c:\Users\melov\Pictures " ^| findstr  /v ".jpg"') do echo "%%F"

类似的主体使用tokens=*

@echo off
for /f "tokens=*" %%F in ('dir /b /s /a-d "c:\Users\melov\Pictures " ^| findstr  /v ".jpg"') do echo "%%F"

推荐阅读