标题: [文件操作] [已解决]批处理命令for /r 参数能跨盘符操作吗? [打印本页]
作者: peterwu999 时间: 2013-2-11 01:24 标题: [已解决]批处理命令for /r 参数能跨盘符操作吗?
本帖最后由 peterwu999 于 2013-2-23 20:34 编辑
我的机器分割为C: D: E: F:,
为了想要同时删除不要的文件*.torrent,
写了代码如下:- for %%a in (c: d: e: f:) do (
- for /f "tokens=*" %%h in ('"dir /b /s /a-d %%a\*.torrent"') do (
- @del /a /f /q "%%h"
- )
- )
- pause
复制代码
上面的代码基本操作没有问题,
但是遇到日文资料夹路径会变成乱码,
该资料夹底下的文件就无法删除,
想了很久,
想到用for /r 到每个资料夹底下直接删除,
于是写了- for /r "f:" %%a in (.) do del /a /f /q "%%a"\*.torrent
复制代码
这个代码能对付日文资料夹运作正常,
美中不足的是4个盘符需要执行4次,
期间我也尝试过复合指令,- for %%a in (c: d: e: f:) do (
- for /r "%%a" %%h in (.) do del /p %%h\*.torrent
- )
复制代码
尝试再简化,
可是盘符都无法顺利代入第2条,
碍于功力不足,
在最后的简化部分脑子已经打结了好几天都转不出来,
所以厚颜来此求助,
希望版上高手先进能指点一下,
若有其它方式可达到同样目的也请不吝分享,
毕竟解决这种小问题是其次,
能够学习进步才是主旨,
在此祝各位版友新年快乐万事如意。
作者: Foxie 时间: 2013-2-11 15:46
可能是代码页的问题:
用复制代码
试下看
http://baike.baidu.com/view/1244987.htm
作者: Foxie 时间: 2013-2-11 16:00
想来想去,忽然发现你的标题错了,呵呵!
建议改成"CMD中日文与中文的兼容问题!"
作者: peterwu999 时间: 2013-2-12 02:26
回复 2# Foxie
不过我目前机器的设置并无法改成其它编码,
所以还是要找寻其它的解决方式,
你的方法我会找其它的机器学习看看,
多谢指教!
作者: terse 时间: 2013-2-14 13:16
回复 Foxie
不过我目前机器的设置并无法改成其它编码,
所以还是要找寻其它的解决方式,
你的方法 ...
peterwu999 发表于 2013-2-12 02:26
试 CALL- @ECHO OFF
- for %%a in (c: d: e: f:) do CALL:LOOP %%a
- pause&exie
- :LOOP
- for /r "%~1" %%h in (.) do ECHO %%h
复制代码
作者: CrLf 时间: 2013-2-14 16:49
in 之前的部分不能用 %%a 或 !str! 来操纵语法。
既然是全盘删除,可以利用 del 的 /s 开关:- @echo off
- 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 "
- for %%a in (%disk%) do if exist %%a:\nul echo del /a /s /f /q "%%a:\*.torrent"
- ::若输出无误请自行去掉 del 前的 echo
- pause
复制代码
也可以这样:- @echo off
- set "file=*.torrent"
- 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"
- setlocal enabledelayedexpansion
- echo del /a /s /f /q "%disk: =:\!file!" "%:\!file!"
- ::若输出无误请自行去掉 del 前的 echo
- pause
复制代码
作者: ht河豚 时间: 2013-2-17 20:48
本帖最后由 ht河豚 于 2013-2-17 20:59 编辑
del的/s比较慢
来个for /f+dir的- @echo off
- 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 (
- echo 开始遍历磁盘%%i...
- for /f "tokens=* delims= " %%j in ('dir %%i:\ /a /b /s') do (
- Echo %%j>>temp.tmp
- )
- )
- echo 筛子筛选中...
- ::筛子筛选
- findstr /x /c:"..torrent">>Wait.tmp
- del temp.tmp
- echo 筛选完毕...等待用户检查
- for /f "tokens=* delims= " %%i in (Wait.tmp) do (
- echo %%i
- )
- echo 请检查上述文件!!!
- echo 无误请按任意键开始删除...
- pause>nul
- for /f "tokens=* delims= " %%i in (Wait.tmp) do (
- del %%i
- )
- echo 删除完成!
- del Wait.tmp
- pause
复制代码
Ps:代码测试后由于结构问题前期有一定的停顿,请让其继续执行
作者: peterwu999 时间: 2013-2-23 20:36
多谢以上各位先进热心的指导!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |