Board logo

标题: [文件操作] 批处理如何无视空格目录? [打印本页]

作者: Finera    时间: 2012-8-2 14:27     标题: 批处理如何无视空格目录?

  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中,却无法判断哪些目录中有空格也无法给该行索引前后加引号……求高手支招……
作者: apang    时间: 2012-8-2 18:23

路过,不是高手
  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
复制代码

作者: 冷玉公子    时间: 2012-8-2 22:46

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
复制代码

作者: Finera    时间: 2012-8-15 13:06

谢谢~学习了~还有tokens和delims这种玩法~
作者: ht河豚    时间: 2012-8-18 19:55

随手写的,看行不
  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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2