Board logo

标题: [文件操作] 批处理如何全盘搜索相同名称的文件然后把文件移动到一个文件夹? [打印本页]

作者: BillGates    时间: 2011-11-18 11:01     标题: 批处理如何全盘搜索相同名称的文件然后把文件移动到一个文件夹?

想做一个批处理给班级,因为老师U盘太多毒了,总是会让班级的电脑感染病毒。该批处理要像这样:

1,全盘搜索相同名字的可执行文件(没有特定名称,只要在不同的盘存在两个文件名称相同即可满足条件)
2,重命名病毒文件(改后缀)
3,接着全部都移动到一个指定的文件夹内。
4,最好操作可逆,若某个文件是正常文件可以恢复到原来的路径。
5,最好可以有一个枚举的形式。
有点思路但是不会写,今天写了一个结果把全部的exe全删除了,还好C盘有还原卡。才来求救。
作者: CrLf    时间: 2011-11-18 14:18

本帖最后由 CrLf 于 2011-11-18 14:19 编辑

这事交给 xcopy 做吧
  1. @echo off
  2. set file=test.exe
  3. set folder=e:\test
  4. set dir=c d e f g h i j k l m n p q r s t u v w x y z
  5. for %%a in (%dir%) do if exist %%a:\nul xcopy /s /h /r /y "%%a:\%file:"=%" "%folder:"=%\%%a\"
复制代码

作者: wc726842270    时间: 2011-11-18 15:49

个人建议:用一下NTFS的磁盘“配额”限制一下,方法,百度一下吧。我说了也只会是蜻蜓点水,当然也可以权限
作者: BillGates    时间: 2011-11-18 16:02     标题: 标题

回复 2# CrLf


谢谢你的回复,但是我指的同名文件是不特定的,是这样的,假如存在c:\windows\1.exe,D:\1.exe,E:\1\1.exe,就判定这个文件是病毒,然后将其后缀改为其他的,可以让用户后面去人工再次判定。
作者: BillGates    时间: 2011-11-18 16:05

回复 3# wc726842270


    谢谢你的回复,但是那个盘是不能限额的,因为老师要保存课件。我看了很多批处理反病毒方面的,觉得有些是挺有创意的,但是实现起来很有难度。而且效率不高,例如我这种虽然也是效率不高,但是还是可以凑合用吧。期待可以实现。
作者: 〃十月丶    时间: 2011-11-18 16:09

如果你确定u盘里有用的东西,那么你可以排除下,将不符合要求的都del
作者: cjiabing    时间: 2011-11-18 16:55

论坛有现成的U盘杀毒,如果无法预料后果请不要随便使用。同名也不难,使用查找重复文件的模式——for
作者: BillGates    时间: 2011-11-18 17:11     标题: 标题

本帖最后由 BillGates 于 2011-11-18 20:24 编辑

回复 6# 〃十月丶


    这个我会,但是呢,班级电脑有还原卡,程序不能常驻,还有就是我不能每次都去进行这个操作。我要的是在病毒感染后清除病毒体。反正C盘会被还原。不知有没更好的建议。
作者: BillGates    时间: 2011-11-18 20:30     标题: 标题

回复 7# cjiabing


    主要是我不知道两个功能怎么衔接呀。U盘杀毒不是我想要的,因为老师的U盘我不可能总是去操作,我只是想清除掉病毒体。C盘会被还原,病毒的机制就失效了,清除病毒体就可以避免其他人错误点击,导致重复感染。谢谢。
作者: cjiabing    时间: 2011-11-18 21:46

回复 9# BillGates


    还不是一个鬼样?你的目的是清除病毒,避免误点而导致的重复感染。假如批处理能做到的,杀毒软件不是更加能做到?你想要小一点的就拿usbcleaner,或者论坛里的USBkill……
作者: CrLf    时间: 2011-11-18 22:38

本帖最后由 CrLf 于 2011-11-20 20:35 编辑

回复 4# BillGates


    这个好办,可是很容易误杀的,你确定要这样?
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a 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 if exist %%a:\nul set dir=!dir! %%a:\
  3. endlocal&set dir=%dir%
  4. (for /f "delims=" %%a in ('dir /s /b /a-d %dir:\=\*.exe %') do echo %%~da%%~na)>tmp
  5. (for /f "tokens=1* delims=\" %%a in ('sort tmp') do (
  6.    set now=%%a
  7.    setlocal enabledelayedexpansion
  8.    if !last!==!now! del /s /q /f /a  !dir:\=\%%~nxa!
  9.    endlocal
  10.    set last=%%a
  11. ))2>nul
  12. del tmp
复制代码
不过这种方法没有办法备份...
作者: BillGates    时间: 2011-11-18 22:49

回复 10# cjiabing


    可是我教室的杀软是瑞星2007的,U盘全是exe都不报毒,无奈,而且,那个软件是卸载不了的,因为还原卡的缘故,要是可以用杀软我早都用了。并且,我想的是杀掉D E盘的病毒体。实质是不会自动运行,不会主动繁衍的可执行文件啦,而要是别人点击了它,还是会感染其他的。而那个U盘杀毒的,不是只能针对U盘的东西吗?我不想用软件啦,想用批处理简单的清扫一下病毒的残兵败将而已。
作者: CrLf    时间: 2011-11-18 23:10

回复 12# BillGates


    瑞星 2007...看到瑞星我就郁闷了,看到 2007 更郁闷了
作者: BillGates    时间: 2011-11-18 23:16

回复 11# CrLf


    没备份没关系的,只要能把它们集中在一个文件夹就好了。我想研究研究它们,谢谢你。
作者: BillGates    时间: 2011-11-18 23:19

回复 13# CrLf


    我也很郁闷,看着U盘插入后,病毒还是大行其道,实是无奈啊。不过还好有还原卡,重启后他们都是浮云。就是个尸体罢了。不过数量很多。每个文件夹都有,名字都相同,不是那种依照文件夹名的。更加弱智。用你那个,在结合同文件名查杀,那就可以收拾尸体了。
作者: CrLf    时间: 2011-11-18 23:28

回复 15# BillGates


    我那个比较危险啊,因为是用 del /s,所以无法备份,也无法修改后缀名,只能将重名 exe 全部删除...
    而如果不用 del /s,那效率会很低的...
    你能否再提供一些病毒的特征
作者: cjiabing    时间: 2011-11-18 23:44

以前写的东西:http://www.bathome.net/thread-8100-1-1.html
[安全相关] 批处理版同名文件夹病毒专杀(2010.5.28更新)
作者: wc726842270    时间: 2011-11-19 03:27

即然如此给你推荐一下软件吧,
Filemon
一个简单的描述:
Filemon 是一款出色的文件系统监视软件,它可以监视应用程序进行的文件读写操作。它将所有与文件一切相关操作(如读取、修改、出错信息等)全部记录下来以供用户参考,并允许用户对记录的信息进行保存、过滤、查找等处理,这就为用户对系统的维护提供了极大的便利。
呵呵,杀毒前先要却认哪一个是病毒或木马,像360一类的软件没用过,批处理只能“解决问题”,发现还要自已
作者: bluewing009    时间: 2011-11-19 08:06

记得U盘病毒的特征不是你说的那样…………应该是和文件夹同名的exe
作者: BillGates    时间: 2011-11-19 10:35     标题: 标题

回复 16# CrLf


    这个病毒比较弱智。当然我们老师U盘每次带来的病毒几乎都不同。有起初文件夹名相同的,感染后在电脑的每个盘生成一个Max_I.exe,一个autoruns.inf双击盘符会重复感染,windows目录下一个exe,还有就是注册表启动项被写入那个exe,多个进程互相保护,打开任务管理器会注销,不过一重启就剩下D E有病毒文件了。第二个是每个盘生成一个My Documents.exe,一个Serves.exe,Windows目录下两个exe,注册表启动,并且写入到系统服务。但是还是一个样,重启就剩下D E盘有文件了。所以我才萌生把它们集中到一个文件夹来。前期不重启的条件下根据条件把病毒体清除。因为他们都有相同的文件名,所以只要有两个盘的文件名相同的,就判定为病毒,为了防止误删,就把他们移动到一个文件夹内,然后再人工判断。这个就是我的目的。
作者: BillGates    时间: 2011-11-19 10:36

回复 17# cjiabing


    Thanks,等我回家时去下载。O(∩_∩)O
作者: BillGates    时间: 2011-11-19 10:39

回复 18# wc726842270


    其实电脑要是把杀软换了还差不多,治标也治本,老师U盘的病毒可以被清除,电脑上的也是。但是无奈啊。瑞星2007啊,我蛋疼了。病毒它都不报,还阻止正常批处理运行。哎~没救了。
作者: BillGates    时间: 2011-11-19 10:42

回复 19# bluewing009


    呼呼,bluewing好久没看到你了呢,那个应该可以说是U盘病毒吧,在U盘内是同名exe,但是在电脑其他盘就不同名了。不过还是伪装成文件夹,也有伪装成正常程序的。文件名相对是固定的。
作者: BillGates    时间: 2011-11-19 13:44

回复 11# CrLf


    你第二个批处理的代码运行时提示文件名、目录或卷标语法不正确。发现全部都是连在一起的卷标那些。
作者: cjiabing    时间: 2011-11-19 14:12

回复 20# BillGates

假如你U盘里面只放文件,从来不放EXE文件的,发现EXE文件就全部删除,包括INI。去掉那些能够自动弹出U盘的东西,desktop_ini?。
假如有一些EXE文件,但这些文件都超过1M的话,你也可以将小于1M的删掉,判断大小用DIR火FOR。有同名病毒是1.20M的?
如果知道文件名,清理它们都不算难度。直接用文件名来判断,并且为防误删,你直接MOVE到一个盘里封住。
其他的,即使同名,一个是文件夹,一个是EXE,这个还是可以区分的,不会误删。判断文件夹用if exist windows\. dir /ad windows,或者其他的。
综合起来,判断文件名是否病毒,是就直接删,然后判断是否与文件夹同名,是可以删除,为慎重起见,再判断该文件的创建或修改时间,判断文件的大小,这样,你就可以80%的把握它是不是病毒了。
一般情况下,驱动盘第一层目录是很少有EXE文件的,自己放的除外。而U盘可能会所有文件夹都挨,而只要文件名同样,基本上可以删掉同名 EXE,不同名的一般会有固定的文件名,找到删掉,文件名变化的,根据时间大小也可以清楚,不过要确认一下。
作者: 920168    时间: 2011-11-19 14:57

现U盘中毒的少了
作者: BillGates    时间: 2011-11-19 21:13

回复 25# cjiabing


    是的,的确有很多方法,我今天写了一个,就是直接判断根目录exe,接着判断是否存在相同。然后直接move。哎,只有这点技术了。实不如各位大大。
作者: BillGates    时间: 2011-11-19 21:14

回复 26# 920168


    说的对,但是要知道在学校这种地方。古董机上很多东西啊。难免会有人感染。
作者: sxw    时间: 2011-11-20 19:51

用 everything搜索后,导出路径的列表,再用批。。。。呵呵




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