找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 86745|回复: 16

[文件操作] [已解决]批处理删除隐藏文件时,目录名含有英文!怎么办

[复制链接]
发表于 2024-4-27 13:47:37 | 显示全部楼层 |阅读模式
各位大佬好!
请问使用Bat批处理进行批量删除目录下指定文件(普通文件和只读隐藏文件)的时候,如果目录名称 或 路径含有英标的!特殊符号(此时开启了延迟变量扩展)
那么此时删除含有!特殊符号的目录内的普通/只读隐藏文件时,会返回 The system cannot find the file specified(系统找不到指定的文件)的错误
因为Bat程序会将路径中的!识别为命令,从而系统找不到指定文件。
我的代码如下:
  1. @echo off & chcp 65001>nul & setlocal enabledelayedexpansion

  2. set "folder_path=%~dp0Working\%1"
  3. set "del_files_suffix_list=jpg txt url html"

  4. REM 删除普通文件中的123.jpg、*.txt、*.url、*.html
  5. for /f "delims=" %%i in ('dir /b /s /on "!folder_path!"') do (
  6.         if "%%~nxi" equ "123.jpg" (echo. & echo Delete:%%i & del /s /q "%%i")
  7.         for %%j in (!del_files_suffix_list!) do (
  8.         if "%%~xi" neq ".jpg" (
  9.                 if "%%~xi" equ ".%%j" (echo. & echo Delete:%%i & del /s /q "%%i")
  10.         )
  11. )
  12. REM 删除只读、隐藏文件中的*.jpg、*.txt、*.url、*.html
  13. for /f "delims=" %%i in ('dir /ar /ah /b /s /on "!folder_path!"') do (
  14.         for %%j in (!del_files_suffix_list!) do (
  15.                 if "%%~xi" equ ".%%j" (echo. & echo Delete:%%i & del /ar /ah /s /q "%%i")
  16.         )
  17. )
复制代码
结果返回:
  1. Delete:D:\Quick_Access\Desktop\Picture-Tools\Working\100\123123\123.jpg
  2. The system cannot find the file specified.
复制代码
原目录名称为:123!123
---------------------------------
其它补充:
[1].部分二级目录名称含有外语(日语/韩语/英语),为了防止遍历时出现乱码,所以使用了chcp 65001
[2].第9行代码的写法,是因为需要删除只读隐藏文件的名称为全中文,接上点,由于使用了chcp 65001去适配外语目录名称,现在无法正常识别变量中的中文字符.为了防止删除普通文件和出现乱码的情况,所以添加了此代码(如有更好的方法,感谢大佬的贡献!)
---------------------------------
我的需求是:
[1].在目录名称含有!特殊符号下,删除指定的普通/只读隐藏文件(名称+后缀)
[2].在目录名称含有!特殊符号下,删除指定的普通/只读隐藏文件(后缀)
[3].尽可能的使用for循环完成操作(学习目的) - *重点*
---------------------------------
最后最后,感谢各位提供方案的大佬们!!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-4-27 14:09:13 | 显示全部楼层
楼主的代码有一些错误,还有一些不好理解的地方,不如直接描述下需求,重新写好了。
 楼主| 发表于 2024-4-27 14:18:46 | 显示全部楼层
回复 2# 77七


    代码已简化,大致意思是,接收主Bat程序传递的参数%1(一级目录名称),使用dir遍历该路径所有文件,判断该遍历文件是否等于123.jpg,如果等于则删除,现在的问题是目录名称中含有英文!特殊符号,使用del 删除文件时,结果返回找不到指定文件
发表于 2024-4-27 14:26:39 | 显示全部楼层
回复 3# microsoft_yaw


  
  1. @echo off & chcp 65001 >nul

  2. set "folder_path=%~dp0Working\%1"
  3. set "del_files_suffix_list=jpg txt url html"

  4. del /s /q "%folder_path%\123.jpg"
  5. pause
复制代码
 楼主| 发表于 2024-4-27 14:50:16 | 显示全部楼层
回复 4# 77七


    可是我需要批量处理呀,延迟变量扩展和for循环是不可缺的
发表于 2024-4-27 14:57:51 | 显示全部楼层
ENDLOCAL
del 111!222\123.jpg
SETLOCAL ENABLEDELAYEDEXPANSION
发表于 2024-4-27 15:19:47 | 显示全部楼层
回复 5# microsoft_yaw


   4楼代码就是批量处理,先dir ,再判断是否等于,再删除,属于多此一举。
 楼主| 发表于 2024-4-27 16:26:40 | 显示全部楼层
回复 7# 77七


    第一次发帖,有些遗漏,已补充,不好意思
发表于 2024-4-27 17:44:40 | 显示全部楼层
回复 8# microsoft_yaw


   
现在的代码为什么还会用到 setlocal enabledelayedexpansion 呢
发表于 2024-4-27 17:49:12 | 显示全部楼层
有没有试过在FOR里开启延迟
 楼主| 发表于 2024-4-27 17:54:58 | 显示全部楼层
回复 9# 77七


    使用for循环不需要开启延迟变量扩展吗?
发表于 2024-4-27 18:02:38 | 显示全部楼层
回复 11# microsoft_yaw


   
不是必须。
 楼主| 发表于 2024-4-27 18:05:32 | 显示全部楼层
回复 12# 77七


    我知道可以直接使用del /s /q 和 del /ar /ah /s /q 删除指定文件,但我想了解学习一下for如何解决这种情况(目录名称含有!特殊符号)
发表于 2024-4-27 18:23:10 | 显示全部楼层
回复 13# microsoft_yaw


  
  1. @echo off & chcp 65001 >nul

  2. set "folder_path=%~dp0Working\%1"

  3. for /f "delims=" %%i in ('dir /b /s /a-d "%folder_path%\*.jpg"') do (
  4.         set str=%%i
  5.         setlocal enabledelayedexpansion
  6.         echo !str!
  7.         endlocal
  8. )
  9. pause
复制代码
开就是这样,也可以不开
 楼主| 发表于 2024-4-27 18:35:24 | 显示全部楼层
本帖最后由 microsoft_yaw 于 2024-4-27 19:17 编辑

回复 14# 77七

大佬,这样子如何?
  1. @echo off & chcp 65001>nul & setlocal enabledelayedexpansion

  2. set "del_files_list=123.jpg *.txt *.url *.html"

  3. for %%i in (!del_files_list!) do (del /s /q "%folder_path%\%%i")
  4. del /ar /ah /s /q "%folder_path%\*"
复制代码
这个代码还没有尝试,应该可以去除setlocal enabledelayedexpansion
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:48 , Processed in 0.022025 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表