[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何无视空格目录?

  1. @echo off
  2. SET Kill=
  3. SET /P Kill=   输入要执行操作的位置(直接按回车则在当前位置执行):
  4. if "%Kill%"==" " SET Kill=%CD%
  5. dir %kill% /ad /b /s |sort /r >>c:kill.txt
  6. For /f %%i in (c:kill.txt) DO rd %%i
  7. echo y |del c:kill.txt
  8. @echo 清理%kill%完成
  9. @pause
复制代码
这段是网上收集改写的一个简单的清理空目录的批处理,现在问题是,通过管道将索引列表塞进了c:kill.txt中,却无法判断哪些目录中有空格也无法给该行索引前后加引号……求高手支招……

路过,不是高手
  1. @echo off
  2. set/p Kill=输入要执行操作的位置(直接按回车则在当前位置执行):
  3. if "%Kill%"=="" set "Kill=%~dp0"
  4. For /f "delims=" %%i in ('dir /ad /b /s "%Kill%"^|sort /r') DO (
  5.   rd "%%i" 2>nul && echo 已删除"%%i"
  6. )
  7. echo 清理"%Kill%"完成&pause
复制代码

TOP

dir /b /s /ad 没错
不过要避免空格最好的方法是在For里面用 %%~S 扩充到一个短路径
  1. @Echo Off
  2. For /F "tokens=*" %%A In ('dir /s /b /ad c:\*') Do (
  3. Rd %%~SA || Echo 删除空目录 %%A 成功
  4. )
  5. Pause
复制代码

TOP

谢谢~学习了~还有tokens和delims这种玩法~

TOP

随手写的,看行不
  1. @echo off
  2. SET Kill=
  3. SET /P Kill=   输入要执行操作的位置(直接按回车则在当前位置执行):
  4. if "%Kill%"==" " SET Kill=%CD%
  5. dir %kill% /ad /b /s |sort /r >>c:\kill.txt
  6. for /f "tokens=* delims= " %%i in (c:\kill.txt) do (
  7. echo "%%i">>c:\kill2.txt
  8. )
  9. move c:\kill2.txt c:\kill.txt
  10. For /f %%i in (c:\kill.txt) DO rd %%i
  11. echo y |del c:\kill.txt
  12. @echo 清理%kill%完成
  13. @pause
复制代码

TOP

返回列表