[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
1,不要在for的子句里循环goto!
2,尽量不要在for的子句中放太多代码,设计、测试、修改都很麻烦!
3,如果可以,尽量把每一部分功能都标签段落,这样方便自己也方便别人。
  1. @echo off
  2. :a:循环监视D:\scan目录
  3. for /f "delims=" %%a in ('dir /a/b/s D:\scan') do set a=%%a
  4. if not defined a (
  5.         echo 请勿动,正在监控之中......
  6.         ping 127.1 -n 5 >nul
  7.         cls
  8.         goto:a
  9. )
  10. :b:延迟30秒
  11. echo 30秒之后扫毒开始......
  12. ping 127.1 -n 30 >nul
  13. start "" "scan.exe"
  14. cls
  15. :c:循环监视Scan进程
  16. echo 正在扫描病毒......
  17. ping 127.0.0.1 -n 5 >nul  
  18. tasklist|find /i "scan.exe"||goto:d
  19. cls
  20. goto:c
  21. :d:检查病毒扫描日志
  22. echo 病毒扫描完成......
  23. cls
  24. echo 正在检查病毒扫描日志......
  25. for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set da=%%a&set db=0%%b&set dc=0%%c
  26. for /f "delims=" %%a in (D:\log\%db:~-2%%dc:~-2%%da%.log) do set a=%%a
  27. echo %a%|find /i "Risks: 0"&&xcopy D:\scan E:\scaned /cqfiserhk||start "" "Alarm.bat"
  28. echo 上传的数据没有病毒,已经转移到达目的地!
  29. cls
  30. goto:a
复制代码
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 16楼 的帖子

首先谢谢您一直这么热心的帮助我!

对于您的代码和我的需求还有一点点差异:
用户在客户端使用数据上传系统会要求他先输入工号(例如:A00123),这时服务器端 D:\scan\  里马上生成名为“A00123”的空文件夹,然后用户传的文件就会在 A00123 文件夹里 (备注:这样方便用户在服务器上快速找到自己上传的文件)。

现在批处理在服务器端运行时出现的问题是:用户的个人文件夹 A00123 刚刚创建好,还没有开始往里面上传东西,此时批处理已经开始“30秒之后扫毒开始......”,此时D:\scan\  下面只有一个空文件夹 A00123 ,用户还没有传资料,根本还没有一个字节,所以此时批处理应该仍然处于“请勿动,正在监控之中......”才正确。
如果 A00123 里面开始有文件传上来了,才应该开始“30秒之后扫毒开始......”(即:给用户30秒钟时间上传),因为有时用户创建了他工号命名的文件夹之后,因为某种原因然后就走了,没有接着执行上传文件,那对于一个空的文件夹就不应该扫毒了。

TOP

回复 16楼 的帖子

在您的代码基础上我又进行了一点修改,现在达到了我的目的了:
   发现D:\scan\下面有非空的文件夹,就开始执行扫描病毒,扫描发现没有病毒就拷贝走并删除源文件,若扫描发现病毒则报警。


@echo off  
:a:循环监视D:\scan目录
echo 请勿动,正在监控之中......
ping 127.1 -n 5 >nul
cls
pushd D:\scan
for /f "delims=" %%b in ('dir /a /b') do (
for /f %%j in ('dir /a/b "%%b"') do (if exist "%%b" goto :b))
goto :a

:b:延迟5秒
echo 5秒之后扫毒开始......
ping 127.1 -n 5 >nul
start "" "iexplore.exe"
cls

:c:循环监视Scan进程
echo 正在扫描病毒......
ping 127.0.0.1 -n 5 >nul  
tasklist|find /i "iexplore.exe"||goto:d
cls
goto:c

:d:检查病毒扫描日志
echo 病毒扫描完成......
cls
echo 正在检查病毒扫描日志......
for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set da=%%a&set db=0%%b&set dc=0%%c
for /f "delims=" %%a in (D:\log\%db:~-2%%dc:~-2%%da%.log) do set a=%%a
echo %a%|find /i "Risks: 0"&&goto:e||goto:f

:e :上传数据无病毒
cls
xcopy D:\scan E:\scaned /s /e /y
echo 上传的数据没有病毒,已经转移到达目的地!
ping 127.1 -n 5 >nul
cls
echo 3秒钟之后清除源文件
@ping 127.0.0.1 -n 3 >nul
for /f "delims=" %%c in ('dir /ad /b D:\scan') do (
dir /a-d /b /s "D:\scan\%%c" && rd /s/q "D:\scan\%%c") >nul
cls
goto:a

:f :上传数据有病毒
cls
start "" "D:\log\alarm.bat"
echo 上传的数据可能存在病毒,请检查......
pause
goto:a

TOP

返回列表