Board logo

标题: 求助:全盘搜索指定文件并删除(好久没有来DOS联盟了) [打印本页]

作者: fengzi     时间: 2009-2-13 15:42    标题: 求助:全盘搜索指定文件并删除(好久没有来DOS联盟了)
情况是这样子的` 我服务器上有一系列文件 d:\a\1 d:\a\2 d:\a\3 d:\a\4 d:\a\5 d:\b\1 d:\b\2 d:\b\3 d:\b\4 d:\b\5 e:\a\1 e:\a\2 e:\a\3 e:\a\4 e:\a\5 e:\b\1 e:\b\2 e:\b\3 e:\b\4 e:\b\5 我想全盘查找 3 4 5 这几个文件并删除 好久没有写过批处理``以前学的都丢了 ` 呵呵``希望过路的大虾出手援助一下`` ───────────────── 版务记录 ───────────────── 执行:HAT 操作:[2009-02-13]在帖子标题中增加搜索关键字 说明:原标题"好久没有来DOS联盟了 `有个批处理需要大家帮我写下`"不利于论坛搜索 处罚:扣除2点积分 提示:建议阅读以下帖子 {1415}提问的智慧 {7326}论坛新手必读,所有人的基本行为准则 {22703}请不要做浮躁的人 {27314}反面教材:本论坛“精彩”标题小集 {32667}愤怒:那些连标题都写不清楚的人们啊,你们醒醒吧 {32825}本版严厉整顿烂帖 ───────────────── 版务记录 ───────────────── [ Last edited by HAT on 2009-2-13 at 22:48 ]

作者: zhengqian529     时间: 2009-2-13 15:45
==,刚才看错了。 想想 [ Last edited by zhengqian529 on 2009-2-13 at 15:46 ]

作者: fengzi     时间: 2009-2-13 15:45
刚才正在编辑``

作者: yishanju     时间: 2009-2-13 15:48
... 列举一下要删除什么文件

作者: fengzi     时间: 2009-2-13 15:49
比如每个盘的 3 4 5这几个文件``

作者: fengzi     时间: 2009-2-13 15:57

作者: zhengqian529     时间: 2009-2-13 16:01
1. dir /a-d /s /b "盘符" >>a.txt ::将所有的文件存放到a.txt文件中 2. for /f "delims=" %%i in ('findstr "3 4 5" a.txt') do del %%i ::删除你想删除的3,4,5文件.

作者: terrytong     时间: 2009-2-13 16:05
for /r %%a in (name) do del %%~fa

作者: yishanju     时间: 2009-2-13 16:07
Originally posted by zhengqian529 at 2009-2-13 16:01: 1. dir /a-d /s /b "盘符" >>a.txt ::将所有的文件存放到a.txt文件中 2. for /f "delims=" %%i in ('findstr "3 4 5" a.txt') do del %%i ::删除你想删除的3,4,5文件.
会误删文件的 比如有一个目录名包含4的话

作者: fengzi     时间: 2009-2-13 16:30
这样会连软件名包括那几个字的都给删掉的``

作者: yishanju     时间: 2009-2-13 16:49
需要用findstr 正则匹配。

作者: jy02116916     时间: 2009-2-13 16:53
@echo off
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3" get caption') do dir /a-d/s/b %%a\3 >>%temp%\dir.txt 2>nul
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3" get caption') do dir /a-d/s/b %%a\4 >>%temp%\dir.txt 2>nul
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3" get caption') do dir /a-d/s/b %%a\5 >>%temp%\dir.txt 2>nul
for /f "delims=" %%i in (%temp%\dir.txt) do del "%%~fi" 2>nul
del %temp%\dir.txt >nul

作者: fengzi     时间: 2009-2-13 17:25
Originally posted by jy02116916 at 2009-2-13 04:53 PM: [code]@echo off for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3" get caption') do dir /a-d/s/b %%a\3 >>%temp%\dir.txt 2>nul for /f "skip=1" %%a ...
代码测试无效啊``不过还是谢谢了``

作者: zhengqian529     时间: 2009-2-13 18:47
Originally posted by yishanju at 2009-2-13 16:07: 会误删文件的 比如有一个目录名包含4的话
恩,刚才开会去了,我也想到了这个问题,那可以这样: %~nI% 取a.txt文件里面的文件名
@echo off&setlocal EnableDelayedExpansion

for %%i in (e) do (
    dir /a-d /s /b %%i:\>>a.txt)

for /f "delims=" %%i in (a.txt) do (
    set var=%%~ni
    if "!var!"=="3" del %%i
    if "!var!"=="4" del %%i
    if "!var!"=="5" del %%i
    )

Endlocal

作者: netbenton     时间: 2009-2-13 20:03
cmd 下好简单 del /s 文件列表 就可以了。 pushd d:\ del /s 2 3 4

作者: fengzi     时间: 2009-2-13 21:51
楼上的没有理解到我的意思`` 实际上我服务器上分区有10来个 ` 然后每个分区有几十个不规则命名的文件`` 我要删的文件就是在这些不规则的文件里 所以你上面那个简单的批处理实在很难完成这个工作```

作者: fengzi     时间: 2009-2-13 21:54
14楼的代码我还没有测试 ` 但我现在所遇到的工作实际上起码有好几百个文件 这样一个一个的列出来还是稍有点烦琐``

作者: netbenton     时间: 2009-2-14 04:36
我不相信这样不能k掉所有盘的 2 3 4 这几个文件 @echo off set dri=cdefghijklmnopqrstuvwxyz :lp set dr=%dri:~0,1% set dris=%dri:~1% cd /d %dr%:\ del /s 2 3 4 if defined dris goto :lp

作者: fengzi     时间: 2009-2-14 11:24
Originally posted by netbenton at 2009-2-14 04:36 AM: 我不相信这样不能k掉所有盘的 2 3 4 这几个文件 @echo off set dri=cdefghijklmnopqrstuvwxyz :lp set dr=%dri:~0,1% set dris=%dri:~1% cd /d %dr%:\ del /s 2 3 4 if defined dris goto :lp
你这个代码确实很有创意 但我在XPSP2下测试失败````

作者: netbenton     时间: 2009-2-14 12:51
问题出在哪里呢? 你要删的到底是什么文件呀 有属性吗? 每个文件名各加上引号再试试

作者: fengzi     时间: 2009-2-14 17:11
代码一直停留在 cd c:\ 一直在C分区寻找文件删除 而且只能删掉根目录下的文件``

作者: netbenton     时间: 2009-2-14 17:46
你的系统不支持: cd /d 和 del /s 吗? 再试这样吧: @echo off set dri=cdefghijklmnopqrstuvwxyz :lp set dr=%dri:~0,1% set dris=%dri:~1% %dr%: cd \ for /f "delims=" %%a in ('dir/a-d/s/b 2 3 4') do del "%%a" if defined dris goto :lp

作者: pizigao     时间: 2010-3-19 14:04
有些代码可以参考下的

作者: clamber     时间: 2010-3-22 14:58
作者: ZJHJ     时间: 2010-3-23 09:54
@echo 按清单查找程序或文件路径,请分行填入>t.txt call t.txt for %%f in (C D E F G H I J K) do ( for /f %%i in (t.txt) do ( dir /a /b /s %%f:\%%i DEL %%i ) )

作者: pojiedos     时间: 2010-6-26 12:08
好强1