Board logo

标题: 求一即时删除文件的批处理程序!!! [打印本页]

作者: tianzizhi     时间: 2006-10-15 10:45    标题: 求一即时删除文件的批处理程序!!!

我不想让别人在我的机子上玩QQ游戏,也不好意思直说,但想让安装QQ游戏后不让它运行,我是这样想的,在我的机子搜索游戏的主程序qqgame.exe只要发现它就马上删除它,这样qq游戏就不能玩了,所以想求一在内存中驻存的批处理文件,只要发现有qqgame.exe这个文件就立刻删除它,但要求这个批处理不能占用太多cpu.我的cpu低,请各位高手帮忙了,谢谢!

[ Last edited by tianzizhi on 2006-10-15 at 11:42 ]
作者: zh159     时间: 2006-10-15 10:49

我不行
作者: electronixtar     时间: 2006-10-15 10:49
设置文件夹的权限即可
作者: tianzizhi     时间: 2006-10-15 11:07
我只有管理员帐户的,不想用权限设置,况且也不能确定游戏目录的安装位置的,C盘安装不成可以换成其实盘的,所以这个方法不太行噢,我还是想要可以满足要求的批处理程序的.请高手们动动脑筋了,谢谢!!!!!!!!!!!

[ Last edited by tianzizhi on 2006-10-15 at 11:09 ]
作者: 3742668     时间: 2006-10-15 11:09
利用脚本的确可以满足楼主的要求,不过楼主同时说要顾及系统性能,那么建议楼主通过修改注册表来实现吧.例如:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"RestrictRun"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
"1"="regedit.exe"
"2"="notepad.exe"
"3"="explorer.exe"
保存上面的字符到 禁止程序运行.reg ,然后双击导入注册表.接着结束explorer.exe并立即启动explorer,就只能运行 注册表编辑器,记事本,和explorer了.如果你还有其他需要运行的程序,则在下面依次加上编号和程序路径.
如果你觉得上面的方法不大合适的话也可以用vbs脚本,不过需要付出大概将近7Mb左右的内存吧.
作者: tianzizhi     时间: 2006-10-15 11:14
请3742668版主把批处理文件或脚本贴出来吧,我想试试,谢谢!!
作者: lxmxn     时间: 2006-10-15 11:55

  楼主可以试试下面的代码,也是将其保存为.reg文件,双击运行即可达到你的目的。
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun]

"1"="poco.exe"
"2"="qqgame.exe"
"3"="qq.exe"
  可以在上面依次添加你不想运行的程序。

作者: tianzizhi     时间: 2006-10-16 00:03
以上大侠的注册表方案是可行的,但不是我最想要的,我还不是我最想要的,经过我一天多的一点点探索,我终于找到我想要的方案了,在这小弟我向大家公布一下的我的探索过程,供大家学习,有不对的地方请大家指教.
我最近在学习批处理,对它很有兴趣,所以才坚持让它来实现的我的想法.
我想让这段程序驻留在内存中随时监控qqgame.exe等类似文件存在,若有的话马上删除到,刚开始我想的是目录安在C盘,
用的命令是:
@echo off
if exist c:\"program files"\tencent\qqgame\qqgame.exe  del c:\"program files\tencent\qqgame\qqgame.exe
(那个双引号是我摸索半天才想到的,不加它的话,就会一直提示:系统无法找到路径.我郁闷了半天,难道是目录层次太多,又拿了d盘作实验,结果不管多少目录都可以找到路径,突然想起programe files 是两个单词,是否因为这个呢,先加了单引号,不行,又加了双引号,行了,很高兴)
虽然这个可以,但有两个毛病:一是不是随时监控的,二是目录确定的太死板,改下目录就不管用了.
为了改进它,我又用到了for 命令:
@echo off
for %%1 in (c: d:) do @del %%1\qqgame*.* /s /a
想想怎么一直执行这个命令呢,想到了再循环一次,用了以下命令:
@echo off
:zhang
for %%1 in (c: d:) do @del %%1\qqgame*.* /s /a
goto zhang
这样在我的机子执行了一下
我靠我的cpu都让它用完了,这还了得,它是个死循环了,得另换法了,
我又想能能让for %%1 in (c: d:) do @del %%1\qqgame*.* /s /a
定期执行一次呢,这样cpu就可以休息一下了
我想到了at命令 用at /?一查,希望又没了,它是最小单位是天啊,我反不能一天执行一次吧,算了,再换吧.
我用help看一下还没有别的好的命令

终于让我查到schtasks这个命令,这个命令应该是windows2003特有的,其它系统好像没有,它的用处实在是太强大了,比at要强几百倍,下面附一点它的资料:
Schtasks
安排命令和程序,使其定期运行或在指定时间运行。向计划中添加任务和从中删除任务、根据需要启动和停止任务以及显示和更改计划的任务。

要查看该命令语法,请单击以下命令:

? schtasks create

? schtasks change

? schtasks run

? schtasks end

? schtasks delete

? schtasks query


schtasks create
计划任务。

Schtasks 针对各种计划类型使用不同参数组合。要查看创建任务的组合语法或查看使用特定计划类型创建任务的语法,请单击以下选项之一。

? 组合语法和参数描述

? 计划任务每 N 分钟运行一次

? 计划任务每 N 小时运行一次

? 计划任务每 N 天运行一次

? 计划任务每 N 周运行一次

? 计划任务每 N 月运行一次

? 计划任务在周的指定天运行

? 计划任务在月份的指定周运行

? 计划任务在每月的特定日期运行

? 计划任务在月份的最后一天运行

? 计划任务运行一次

? 计划任务在每次系统启动时运行

? 计划任务在用户登录时运行

? 计划任务在系统空闲时运行

? 计划任务现在运行

? 计划任务以不同权限运行

? 计划任务以系统权限运行

? 计划任务运行多个程序

? 计划任务在远程计算机上运行


组合语法和参数描述
语法
Schtasks /create /sc ScheduleType /tn TaskName /tr TaskRun [/s Computer [/u [Domain\]User [/p Password]]] [/ru {[Domain\]User | System}] [/rp Password] [/mo Modifier] [/d Day[,Day...]| *] [/m Month[,Month...]][/i IdleTime] [/st StartTime] [/ri Interval] [{/et EndTime | /du Duration} [/k]] [/sd StartDate] [/ed EndDate] [/it] [/Z] [/F]

看了半天用了以下命令:
schtasks /create /u 用户名 /p 密码  /sc minute /mo 1 /tn "即时删除" /tr d:\a.bat
a.bat的内容为:
@echo off
for %%1 in (c: d:) do @del %%1\qqgame*.* /s /a
这样看似可以了,但我还有要求,它的最低间隔时间是1分钟,我觉得时间太长,我想15秒
就执行一次,这个先放这吧,再找一下.
我又查看了一会,让我找到了choice这个命令里的/t参数,t的作用是做出默认的选择前,暂停的秒数,它的单位是秒,这正是我想要的,哈哈,机会来了,让我想到下的命令:
@echo off
:zhang
for %%1 in (c: d:) do @del %%1\qqgame*.* /s /a
choice /t 15 /d y
goto zhang
我保存为a.bat
打开后,发现它是一窗口,不能消失,我想让它在后台运行,找一下相关资料,我觉得用vbs脚本不错,又写了下面的脚本:
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "d:\a.bat",0
保存为b.vbs
这样再运行一下,哈哈,成功了,它在后台运行了,每隔15就会检查机器里有无qqgame*.*这样的文件,有的话就马上删除了,终于实现了我的愿望.




后来我在网上搜了一下,又找到一方法,没有试,不知行不行:

  @echo off

setlocal ENABLEDELAYEDEXPANSION

set /a next_hour=0
set /a next_minute=0

for /F tokens=1,2 delims=: %%i in (TIME /T) do (
          rem 这里1是间隔时间,可以根据需要自己调节
   set /a next_minute=%%j+1
   set /a next_hour=%%i
   if !next_minute! GEQ 60 (
       set /a next_minute=!next_minute!-60
       set /a next_hour=!next_hour!+1
       if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24
   )   
)
at !next_hour!:!next_minute! c:\settimerun.bat
rem 这里是具体所要执行的命令,可以根据需要自己调整
copy c:\windows\system32\notepad.exe d:\notepad.exe


endlocal

@echo on
作者: vkill     时间: 2006-10-16 00:07
禁止非法程序好了
作者: tianzizhi     时间: 2006-10-16 04:43
我想学的是一种新思维,并用我所学的知识实现它,思考探索的过程很有趣,各位高手若有其它奇妙的想法贴出来大家学习噢!
(不要光想着如何如何禁止它,从另外角度来思考,就算它安装好了,但如果破坏了它的任何文件,或改变了它的原始路径,或文件重新命名了,它照样运行不起来,是不是呀,这些应如何实现呢,大家平时多思考一下吧,换个角度思考,你会发现你的思维灵活了很多)
作者: vkill     时间: 2006-10-16 04:50


  Quote:
Originally posted by tianzizhi at 2006-10-16 04:43:
我想学的是一种新思维,并用我所学的知识实现它,思考探索的过程很有趣,各位高手若有其它奇妙的想法贴出来大家学习噢!
(不要光想着如何如何禁止堮..

呵呵
作者: redtek     时间: 2006-10-16 05:28
顶!!!
作者: lxmxn     时间: 2006-10-16 05:37


  Quote:
终于让我查到schtasks这个命令,这个命令应该是windows2003特有的,其它系统好像没有,它的用处实在是太强大了,比at要强几百倍

  这个schtasks命令不只是windows2003特有的吧,在我的Windows XP sp2上面也有。
  
  是应该好好的学习一下这个命令了,谢谢提醒。



作者: yiping1973     时间: 2006-10-21 06:50
高!高!
  这个schtasks命令  
  我也是应该好好的学习一下这个命令了,谢谢提醒。
作者: sanhu35     时间: 2006-10-25 10:35
从LZ的帖看到了LZ的成长
感觉我对批处理的认识也成长1些
LZ我可以要下你的QQ吗
我的QQ 37730533 你+我也可以
副:批处理 我就知道了
作者: NaturalJ0     时间: 2006-10-25 20:27
从楼主这儿了解到个新命令,谢谢,又学到新东西了。

PS:楼主的方法是搜硬盘,我觉得效率可能不是很高,如果换成直接用 taskkill 结束 qqgame 的进程,会不会对机子的负担稍低些呢?而且为了对机子负担小些,可以设的时间稍长些。你同学玩QQ游戏时才玩个几分钟突然就莫名的退出了,几次后不明原因也就不想玩了。用 DEL 删除有很小的可能性会碰到“另一个程序正在使用此文件,进程无法访问。”
作者: zrz000     时间: 2006-10-25 21:07
学习了.真不错.
作者: tianzizhi     时间: 2006-10-25 21:34
我的贴又上来了,很开心,又能让大家学到更多的知识了.
谢谢naturaljo的指教,我这些时间已把这个批处理修改的比较人性化了,你说的那个taskkill我已加过了,现在已实现的批处理思想是,开机后运行一计划,隔三分钟检查一下硬盘里有没有qqgame.exe这个程序,没有的话就退出,有的话创建一计划,在一小时后自己执行一结束和删除与qqgame.exe有关的程序,这个结束和删除的批处理驻留的内存中,我想让他们只玩一小时就行了,也不能一会不让玩呀,毕竟是朋友么,我主要是想用这种思维来学习一下在应用中学习批处理.

[ Last edited by tianzizhi on 2006-10-25 at 09:57 PM ]
作者: tianzizhi     时间: 2006-10-25 21:52
我把我已应用的批处理拿上来让大家看看,高手们也指教一下,新手们学习一下,谢谢,
这个批处理分三部分:
第一部分,是开机运行一计划的部分:
首在机子创建一任务:schtasks /create /ru system /sc 3 /mo minute /tn zhang /tr d:\常用\g.vbs 创建好后这个以后就不用管了,它以后会一直在机子里的.
g.vbs连接的批处理内容为:
@echo off
schtasks /change /tn zhang /ru system /enable
schtasks /run /tn zhang

这是第一部分运行计划部分,下面是第二部分,执行检查的部分:
下面的执行部分两种写法
一:
@echo off
for %%1 in (c: d:) do @%%1 & dir QQGame.exe /s /a /b>>c:\windows\dir.txt
type c:\windows\dir.txt | find "QQGame.exe" /i
if errorlevel 1 goto end
if errorlevel 0 goto zhang

:end
exit
:zhang
@echo off

setlocal ENABLEDELAYEDEXPANSION

set /a next_hour=0
set /a next_minute=0

for /F "tokens=1,2 delims=:" %%i in ('TIME /t') do (
   rem 这里1是间隔时间,可以根据需要自己调节
   set /a next_minute=1%%j-100

   set /a next_hour=1%%i-100+1

   if !next_minute! GEQ 60 (
       set /a next_minute=!next_minute!-60
       set /a next_hour=!next_hour!+1
       if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24
   )   
)
schtasks /change /tn zhang /ru system /disable
copy d:\常用\dir.txt c:\windows\ /y
at !next_hour!:!next_minute! d:\常用\d.vbs

endlocal

二:@echo off
for %%1 in (c: d:) do @%%1 & dir QQGame.exe /s /a /b>>c:\windows\dir.txt
type c:\windows\dir.txt | find "QQGame.exe" /i
if errorlevel 1 goto end
if errorlevel 0 goto zhang

:end
exit
:zhang
@echo off
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem 这里1是间隔时间,可以根据需要自己调节
set a=%time:~0,2%
echo %a%
set /a next_hour=a+1
set a=%time:~3,2%
if %a:~0,1%==0 (set /a next_minute=%a:~1%+1) else set /a next_minute=a+1
if %next_minute% GEQ 60 (set /a next_minute=!next_minute!-60
set /a next_hour=!next_hour!+1
if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24
)   
schtasks /change /tn zhang /ru system /disable
copy d:\常用\dir.txt c:\windows\ /y
at !next_hour!:!next_minute! d:\常用\d.vbs
endlocal

上面是第二部分检查的部分,下面是第三部分,到时间执行结束任务和删除程序的部分:
@echo off
:zhang
for %%1 in (c: d:) do @taskkill /f /t /im qqgame.exe & del %%1\qqgame*.* /s /a
choice /t 120 /d y
goto zhang

好了,一共就这么多了,请大家看看吧,也请高手们提出更好的建议,把它更完善一下,谢谢!!!
作者: kingchain     时间: 2006-10-25 22:34
搂主学习的精神值得我学下!
作者: NaturalJ0     时间: 2006-10-25 22:36
用这句
dir /a /s c:\qqgame.exe >nul 2>nul && goto zhang || dir /a /s d:\qqgame.exe >nul 2>nul && goto zhang || goto end
代替
for %%1 in (c: d:) do @%%1 & dir QQGame.exe /s /a /b>>c:\windows\dir.txt
type c:\windows\dir.txt | find "QQGame.exe" /i
if errorlevel 1 goto end
if errorlevel 0 goto zhang
试试?(不生成临时文件 dir.txt。)

PS:你把 qqgame.exe 删了,下次再玩岂不是要重装。
作者: tianzizhi     时间: 2006-10-26 00:52
naturaljo上面的建议很好,简化了不少,也让我揣摩一会子,&&和||用的很好呀,对于nul空设备的用法我是不太熟悉的,你能否找些它的用法贴上好让大家看看呀,你上面的
>nul 2>nul的意思能说明白一下吗,谢谢,其实我也是菜鸟的,要多多学习呀,呵呵.
(向naturaljo解释一下,我机子是不装QQ游戏的,他们玩他们下载自己装,我的机子装了影子系统,开机游戏就没了.我不玩的,只是他们一玩就没有尾了,所有才想这用这个逗逗他们的,我现在在学批处理的,所以有了这个想法,用批处理实现,许多网友说用禁止,我也知道,这样的话我学习批处理还有什么用呢,学习它就要用它的对吧,其实我的最大目的不用禁止玩游戏,而是学习用批处理实现我的想法,学以致用.最后还要谢谢naturaljo的关心!!!!)
作者: NaturalJ0     时间: 2006-10-26 01:44
贴段实例:
C:\Documents and Settings\J>dir test/b
找不到文件

C:\Documents and Settings\J>dir test/b 2>nul

C:\Documents and Settings\J>cd.>test

C:\Documents and Settings\J>dir test/b
test

C:\Documents and Settings\J>dir test/b >nul

C:\Documents and Settings\J>_
>nul 表示屏蔽标准输出
2>nul 表示屏蔽错误输出
结合上面的实例应该能看明白。
作者: tianzizhi     时间: 2006-10-26 04:03
明白了,谢谢!!
作者: bg888     时间: 2006-10-31 11:06    标题: 伟大领袖毛主席说:没有解决不了问题

tianzihi的文章太好了。俺在这里找了好久都没有找到圆满在批处理中定时执行的问题,只好用VBS调用BAT,是你提到CHOICE /T,用此命令在BAT中定时是再好不过了!谢谢!
作者: freeskych     时间: 2006-11-8 12:03
组策略设置,禁止运行相应程序
作者: jasonwang     时间: 2006-11-9 06:30
是基于qqgame.exe做检测吗?有目录限制没有,象我一般都是绿色版QQGAME,你这种方法不知道可行不?
作者: anqing     时间: 2006-11-12 03:03
运行计化任务后,在进程里,有任务的进程吗?
关于schtasks这个命令,有没有详细的中文介绍和下载?
作者: jxf123521     时间: 2006-11-12 13:40
感谢楼主的贴子,让我找到了学习这个的方法!
作者: htysm     时间: 2007-1-24 06:30
XP已经不支持choice 这个命令了。
楼主的钻研精神实在可嘉。
作者: dato     时间: 2007-11-11 16:35
偶尔搜索到这帖,一直想要的方案,呵呵,
要是能够在程序从外部移动硬盘拷贝到电脑的过程中就删除那就好了,不知道熊猫病毒是怎么实现即时删除.gho文件的。
作者: xiandan703     时间: 2007-11-11 18:09
哈哈~~最近我也在学习批处理~~~~~~~~~~~~~··
作者: basdk     时间: 2007-12-6 06:53
在这里向各位学习了好多东西。都是高手!

现在好多系统都是用GHOST版本安装的,为了安全,这些系统都禁止运行.vbs脚本,所以,最好不要用.vbs

[ Last edited by basdk on 2007-12-6 at 06:58 AM ]
作者: liang8050     时间: 2008-5-27 10:24
7楼的老大:我编了个注册表文件,怎么导入不进去?提示无效或只能导入二位制
是关于禁止QQ游戏的,文件如下:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun]

"1"="qqgame.exe"
请各位高手指点
作者: liang8050     时间: 2008-5-27 11:04
tianzizhi
我是个新手,请问tn zhang 是什么意思,我想好好学学批处理,看些什么资料。
谢谢
作者: acaigg     时间: 2010-12-29 17:13
看到了别人的成长。
作者: eminjin     时间: 2011-1-10 19:04
楼主可以换个思路。
比如,你怕C盘,D盘,E盘等盘被安装qqgame,那么很简单么,在每个盘下,相应的目录下,新建一个文本文件,然后改名为qqgame.exe,然后设置权限为只读。
如果害怕被暴力破解,那么也很简单,随便找个后台程序(没啥副作用的),改名为qqgame.exe,然后关联到一个进程上去,开机就运行这个进程。那么qqgame这个程序就不太容易被删了。

如果允许安装,只是想运行之后,在tasklist里把进程杀掉,那么就弄个后台进程,监视tasklist。不过这也没根本解决问题,因为别人只要把qqgame重命名就好了么。

还有一种手段,就是把自己的网络做成proxy,设置用户名密码。这样几乎很难破解。

最后一种,我不确定,就是禁止qqgame对应的端口。

希望可以给楼主一些灵感。