1、要删除的文件包含的指定字符 是多个,所以最好是能定义一个数组,能自己增减自定义的指定字符
2、要删除的文件,必须再指定文件夹名字里。这个指定的文件夹名如果能定义为变量自己修改最好,不能的话就指定为aaa。
3、如果搜索到的包含指定字符的文件所在路径不在第2条的指定文件夹中的话,不删除
4、如果能有注释就最好了,方便理解和自我修改,最后结果打印到控制台。
格式:(假设要删除的文件包含两种字符 指定字符串1,指定字符串2,要删除的文件在文件夹abc中)
当前目录/a1/b2/abc/指定字符1文件 (删除)
当前目录/a1/b2/abc/指定字符2文件 (删除)
当前目录/a1/abc/指定字符2文件 (删除)
当前目录/a1/b2/指定字符1文件 (不删除,因为不是在指定文件夹内)
当前目录/a1/b2/abc/GE/指定字符1文件 (不删除,也不在指定文件夹内,必须是要删除的文件所在文件夹的名字是指定文件夹,只是路径中包含这个文件夹不算。)
以下是一个批处理脚本,可以删除当前目录下指定文件夹中包含指定字符的文件。具体要删除哪些字符,可以在`set`命令中的`filePatterns`变量中进行修改,以逗号分隔多个字符。指定文件夹名字可以在`set`命令中的`targetFolderName`变量中进行修改,如果需要搜索子文件夹中的文件,可以将`for /d`命令中的`/f`参数改为`/r`。
```
@echo off
setlocal EnableDelayedExpansion
set targetFolderName=aaa
set filePatterns=指定字符串1,指定字符串2
for /d %%a in (*) do (
if /i "%%a"=="%targetFolderName%" (
for %%b in (%filePatterns%) do (
for /r "%%a" %%c in (*%%b*) do (
if exist "%%~fc" (
echo 当前目录/%%~pc/%%~nc%%~xc (删除)
rem del "%%~fc"
)
)
)
) else (
for %%b in (%filePatterns%) do (
for /r "%%a" %%c in (*%%b*) do (
if "%%~dpc"=="%cd%" (
echo 当前目录/%%~pc/%%~nc%%~xc (删除)
rem del "%%~fc"
)
)
)
)
)
pause
```
解释:
- `setlocal EnableDelayedExpansion`:启用延迟环境变量扩展,使得在循环中使用的变量能够正确展开。
- `set targetFolderName=aaa`:定义指定文件夹名字为`aaa`,可以根据需要进行修改。
- `set filePatterns=指定字符串1,指定字符串2`:定义要删除的文件中包含的指定字符,以逗号分隔多个字符,可以根据需要进行修改。
- `for /d %%a in (*) do`:遍历当前目录下的所有文件夹,`%%a`为循环变量。
- `if /i "%%a"=="%targetFolderName%"`:判断当前文件夹是否为指定文件夹,忽略大小写。
- `for %%b in (%filePatterns%) do`:遍历要删除的文件中包含的指定字符,`%%b`为循环变量。
- `for /r "%%a" %%c in (*%%b*) do`:在当前文件夹中搜索包含指定字符的文件,`%%c`为循环变量。
- `if exist "%%~fc"`:判断搜索到的文件是否存在。
- `echo 当前目录/%%~pc/%%~nc%%~xc (删除)`:输出要删除的文件路径。
- `rem del "%%~fc"`:删除要删除的文件,需要去掉`rem`注释符号才能生效。
- `if "%%~dpc"=="%cd%"`:判断搜索到的文件所在路径是否为当前目录,如果不是则不删除。
- `pause`:暂停脚本的执行,方便查看输出结果。可以去掉此行以直接运行脚本。追问
```
@echo off
setlocal EnableDelayedExpansion
set targetFolderName=aaa
set filePatterns=指定字符串1,指定字符串2
for /d %%a in (*) do (
if /i "%%a"=="%targetFolderName%" (
for %%b in (%filePatterns%) do (
for /r "%%a" %%c in (*%%b*) do (
if exist "%%~fc" (
echo 当前目录/%%~pc/%%~nc%%~xc (删除)
rem del "%%~fc"
)
)
)
) else (
for %%b in (%filePatterns%) do (
for /r "%%a" %%c in (*%%b*) do (
if "%%~dpc"=="%cd%" (
echo 当前目录/%%~pc/%%~nc%%~xc (删除)
rem del "%%~fc"
)
)
)
)
)
pause
```
解释:
- `setlocal EnableDelayedExpansion`:启用延迟环境变量扩展,使得在循环中使用的变量能够正确展开。
- `set targetFolderName=aaa`:定义指定文件夹名字为`aaa`,可以根据需要进行修改。
- `set filePatterns=指定字符串1,指定字符串2`:定义要删除的文件中包含的指定字符,以逗号分隔多个字符,可以根据需要进行修改。
- `for /d %%a in (*) do`:遍历当前目录下的所有文件夹,`%%a`为循环变量。
- `if /i "%%a"=="%targetFolderName%"`:判断当前文件夹是否为指定文件夹,忽略大小写。
- `for %%b in (%filePatterns%) do`:遍历要删除的文件中包含的指定字符,`%%b`为循环变量。
- `for /r "%%a" %%c in (*%%b*) do`:在当前文件夹中搜索包含指定字符的文件,`%%c`为循环变量。
- `if exist "%%~fc"`:判断搜索到的文件是否存在。
- `echo 当前目录/%%~pc/%%~nc%%~xc (删除)`:输出要删除的文件路径。
- `rem del "%%~fc"`:删除要删除的文件,需要去掉`rem`注释符号才能生效。
- `if "%%~dpc"=="%cd%"`:判断搜索到的文件所在路径是否为当前目录,如果不是则不删除。
- `pause`:暂停脚本的执行,方便查看输出结果。可以去掉此行以直接运行脚本。追问
不好意思现在才看,这个程序,假如有时候不需要指定子文件夹aaa,要删除当前目录下所有包含指定字符的文件,要怎么改呢?或者能否增加一个判断,当targetFolderName有值时就只删除这个文件夹里的,没有值的时候就删除所有指定字符的文件?因为我发现当前目录下还有另外几个指定字符的文件需要删除(有时候要删,有时候不能删需要加个开关),并不在这个指定文件夹内,且不会与上面的字符重复。
温馨提示:答案为网友推荐,仅供参考