各位大佬好!
请问使用Bat批处理进行批量删除目录下指定文件(普通文件和只读隐藏文件)的时候,如果目录名称 或 路径含有英标的!特殊符号(此时开启了延迟变量扩展)
那么此时删除含有!特殊符号的目录内的普通/只读隐藏文件时,会返回 The system cannot find the file specified(系统找不到指定的文件)的错误
因为Bat程序会将路径中的!识别为命令,从而系统找不到指定文件。
我的代码如下:- @echo off & chcp 65001>nul & setlocal enabledelayedexpansion
-
- set "folder_path=%~dp0Working\%1"
- set "del_files_suffix_list=jpg txt url html"
-
- REM 删除普通文件中的123.jpg、*.txt、*.url、*.html
- for /f "delims=" %%i in ('dir /b /s /on "!folder_path!"') do (
- if "%%~nxi" equ "123.jpg" (echo. & echo Delete:%%i & del /s /q "%%i")
- for %%j in (!del_files_suffix_list!) do (
- if "%%~xi" neq ".jpg" (
- if "%%~xi" equ ".%%j" (echo. & echo Delete:%%i & del /s /q "%%i")
- )
- )
- REM 删除只读、隐藏文件中的*.jpg、*.txt、*.url、*.html
- for /f "delims=" %%i in ('dir /ar /ah /b /s /on "!folder_path!"') do (
- for %%j in (!del_files_suffix_list!) do (
- if "%%~xi" equ ".%%j" (echo. & echo Delete:%%i & del /ar /ah /s /q "%%i")
- )
- )
复制代码 结果返回:- Delete:D:\Quick_Access\Desktop\Picture-Tools\Working\100\123123\123.jpg
- The system cannot find the file specified.
复制代码 原目录名称为:123!123
---------------------------------
其它补充:
[1].部分二级目录名称含有外语(日语/韩语/英语),为了防止遍历时出现乱码,所以使用了chcp 65001
[2].第9行代码的写法,是因为需要删除只读隐藏文件的名称为全中文,接上点,由于使用了chcp 65001去适配外语目录名称,现在无法正常识别变量中的中文字符.为了防止删除普通文件和出现乱码的情况,所以添加了此代码(如有更好的方法,感谢大佬的贡献!)
---------------------------------
我的需求是:
[1].在目录名称含有!特殊符号下,删除指定的普通/只读隐藏文件(名称+后缀)
[2].在目录名称含有!特殊符号下,删除指定的普通/只读隐藏文件(后缀)
[3].尽可能的使用for循环完成操作(学习目的) - *重点*
---------------------------------
最后最后,感谢各位提供方案的大佬们!!! |