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

[文件操作] [已解决]批处理命令for /r 参数能跨盘符操作吗?

本帖最后由 peterwu999 于 2013-2-23 20:34 编辑

我的机器分割为C: D: E: F:,
为了想要同时删除不要的文件*.torrent,
写了代码如下:
  1. for %%a in (c: d: e: f:) do (
  2.     for /f "tokens=*" %%h in ('"dir /b /s /a-d %%a\*.torrent"') do (
  3.     @del /a /f /q "%%h"
  4.     )
  5. )
  6. pause
复制代码
上面的代码基本操作没有问题,
但是遇到日文资料夹路径会变成乱码,
该资料夹底下的文件就无法删除,
想了很久,
想到用for /r 到每个资料夹底下直接删除,
于是写了
  1. for /r "f:" %%a in (.) do del /a /f /q "%%a"\*.torrent
复制代码
这个代码能对付日文资料夹运作正常,
美中不足的是4个盘符需要执行4次,
期间我也尝试过复合指令,
  1. for %%a in (c: d: e: f:) do (
  2.         for /r "%%a" %%h in (.) do del /p %%h\*.torrent
  3. )
复制代码
尝试再简化,
可是盘符都无法顺利代入第2条,
碍于功力不足,
在最后的简化部分脑子已经打结了好几天都转不出来,
所以厚颜来此求助,
希望版上高手先进能指点一下,
若有其它方式可达到同样目的也请不吝分享,
毕竟解决这种小问题是其次,
能够学习进步才是主旨,
在此祝各位版友新年快乐万事如意。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

多谢以上各位先进热心的指导!

TOP

本帖最后由 ht河豚 于 2013-2-17 20:59 编辑

del的/s比较慢
来个for /f+dir的
  1. @echo off
  2. for /f %%i in ("C D E F G H I J K L M N O P Q R S T U V W X Y Z") do (
  3.   echo 开始遍历磁盘%%i...
  4.   for /f "tokens=* delims= " %%j in ('dir %%i:\ /a /b /s') do (
  5.     Echo %%j>>temp.tmp
  6.   )
  7. )
  8. echo 筛子筛选中...
  9. ::筛子筛选
  10. findstr /x /c:"..torrent">>Wait.tmp
  11. del temp.tmp
  12. echo 筛选完毕...等待用户检查
  13. for /f "tokens=* delims= " %%i in (Wait.tmp) do (
  14.   echo %%i
  15. )
  16. echo 请检查上述文件!!!
  17. echo 无误请按任意键开始删除...
  18. pause>nul
  19. for /f "tokens=* delims= " %%i in (Wait.tmp) do (
  20.   del %%i
  21. )
  22. echo 删除完成!
  23. del Wait.tmp
  24. pause
复制代码
Ps:代码测试后由于结构问题前期有一定的停顿,请让其继续执行
1

评分人数

TOP

in 之前的部分不能用 %%a 或 !str! 来操纵语法。
既然是全盘删除,可以利用 del 的 /s 开关:
  1. @echo off
  2. set "disk=c d e f g h i j k l m n o p q r s t u v w x y z "
  3. for %%a in (%disk%) do if exist %%a:\nul echo del /a /s /f /q "%%a:\*.torrent"
  4. ::若输出无误请自行去掉 del 前的 echo
  5. pause
复制代码
也可以这样:
  1. @echo off
  2. set "file=*.torrent"
  3. set "disk=c d e f g h i j k l m n o p q r s t u v w x y z"
  4. setlocal enabledelayedexpansion
  5. echo del /a /s /f /q "%disk: =:\!file!" "%:\!file!"
  6. ::若输出无误请自行去掉 del 前的 echo
  7. pause
复制代码
1

评分人数

TOP

回复  Foxie


不过我目前机器的设置并无法改成其它编码,
所以还是要找寻其它的解决方式,
你的方法 ...
peterwu999 发表于 2013-2-12 02:26

试 CALL
  1. @ECHO OFF
  2. for %%a in (c: d: e: f:) do CALL:LOOP %%a
  3. pause&exie
  4. :LOOP
  5. for /r "%~1" %%h in (.) do ECHO %%h
复制代码
1

评分人数

TOP

回复 2# Foxie


不过我目前机器的设置并无法改成其它编码,
所以还是要找寻其它的解决方式,
你的方法我会找其它的机器学习看看,
多谢指教!

TOP

想来想去,忽然发现你的标题错了,呵呵!
建议改成"CMD中日文与中文的兼容问题!"
Batch For Ever.

TOP

可能是代码页的问题:
  1. chcp 932
复制代码
试下看
http://baike.baidu.com/view/1244987.htm
Batch For Ever.

TOP

返回列表