作者: ZJHJ 时间: 2007-10-7 09:12 非常谢谢热心的版主!
用你的 start /wait cmd /c b.bat 的确解决了 问题1,新窗口不能自动关闭. 问题2,a.bat要按n才会继续.的问题.
但是,问题3,在b.bat的程序仍不执行(失灵),还是没有解决.不知为什么?
我最开始是把
cd.>t.txt
for /f "delims=" %%i in (a.txt) do (
if not defined %%i set %%i=A & echo %%i>>t.txt
)
程序和
cd.>t2.txt
for /f "delims=" %%k in (a2.txt) do (
if not defined %%k set %%k=B & echo %%k>>t2.txt
)
程序放在同一个bat中执行,发现不向t2.txt写数据.后来就分别做在a.bat和b.bat中,
运行完a.bat后再运行b.bat,结果都执行正常,所以才有我开始的提问.现在还是没有解决不向t2.txt写数据的问题.作者: lxmxn 时间: 2007-10-7 18:33 我昨天分别测试了一下,程序是模拟你的,写数据,没有什么问题。
可能是你的程序有问题吧,发上来看看。
另外,多个bat文件都可以整合到一个bat中去执行的,没有必要分多个来执行。作者: ZJHJ 时间: 2007-10-7 21:10 这个程序是我自己编写的.主要目的是检查电脑各分区所有的 exe、 dll 、inf 文件是否
被病毒修改,提取被修改的时间和程序路经,提取原始时间和程序路经。我试过好多
对比两个文件的命令,也做过fc的,都不理想。由于各分区所有的 exe、 dll 、inf 文件有几百k--1M,提取的时间是不能容忍的。fc很快,但是查看很不爽很不洁净。
所以才编写了这个:
@echo off
:cxsr
cls
@echo.
@echo 这是文件内容变化检出程序
@echo.
@echo 它将自动检出在原始文件上被改动或增加的行内容
@echo.
@echo.
@echo [方法: 直接删除重复行(不用fc),用 more +n 提取文件]
@echo.
@echo.
SET /P gwjm= 请将原始文件拉入本窗口:
if exist %gwjm% goto zx
@goto cxsr
:zx
COPY %gwjm% 原.txt
@echo 原始文件>原始.txt
more 原.txt>>原始.txt
del 原.txt
:cx2
SET /P xwj= 请将内容有变化的新文件拉入本窗口:
if exist %xwj% goto zx2
@goto cx2
:zx2
::这里开始提取被修改的程序
COPY %xwj% 新.txt
@echo 新文件>新有.txt
more 新.txt>>新有.txt
del 新.txt
copy 原始.txt + 新有.txt en1.txt
del 原始.txt
del 新有.txt
cls
@echo.
@echo 程序正在运行,时间与文件大小成正比,请稍候... ...
@echo.
cd.>a.txt
for /f "delims=" %%i in (en1.txt) do >>a.txt echo ★★%%i
del en1.txt
cd.>t.txt
for /f "delims=" %%i in (a.txt) do (
if not defined %%i set %%i=A & echo %%i>>t.txt
)
del a.txt
findstr /n /i /r /c:"\<新文件\>" t.txt>w.txt
FOR /F %%i in (w.txt) do set m=%%i
cd.>1.txt
more +%m:~0,-6% t.txt>>1.txt
setlocal ENABLEDELAYEDEXPANSION
cd.>1j.txt
FOR /F "delims=" %%i in (1.txt) do (
SET wei=%%i
SET wei=!wei:★★= !
ECHO !wei!>>1j.txt
)
del 1.txt
del t.txt
del w.txt
cls
cd.>2j.txt
findstr /i /v "\<新文件\>" 1j.txt>>2j.txt
cd.>1j.txt
findstr /i /v "\<关闭状态\>" 2j.txt>>1j.txt
findstr /i /v "\<字节\>" 1j.txt>被修改程序.txt
del 1j.txt
del 2j.txt
cls
::这里开始提取未被修改的程序
COPY %xwj% 原.txt
@echo 原始文件>原始.txt
more 原.txt>>原始.txt
del 原.txt
COPY %gwjm% 新.txt
@echo 新文件>新有.txt
more 新.txt>>新有.txt
del 新.txt
copy 原始.txt + 新有.txt en2.txt
del 原始.txt
del 新有.txt
cls
@echo.
@echo 程序正在运行,时间与文件大小成正比,请稍候... ...
@echo.
cd.>a2.txt
for /f "delims=" %%i in (en2.txt) do >>a2.txt echo ★★%%i
del en2.txt
cd.>t2.txt
for /f "delims=" %%k in (a2.txt) do (
if not defined %%k set %%k=B & echo %%k>>t2.txt
)
del a2.txt
findstr /n /i /r /c:"\<新文件\>" t2.txt>w.txt
FOR /F %%i in (w.txt) do set m=%%i
cd.>1.txt
more +%m:~0,-6% t2.txt>>1.txt
setlocal ENABLEDELAYEDEXPANSION
cd.>1j.txt
FOR /F "delims=" %%i in (1.txt) do (
SET wei=%%i
SET wei=!wei:★★= !
ECHO !wei!>>1j.txt
)
del 1.txt
del t2.txt
del w.txt
cls
cd.>2j.txt
findstr /i /v "\<新文件\>" 1j.txt>>2j.txt
cd.>1j.txt
findstr /i /v "\<关闭状态\>" 2j.txt>>1j.txt
findstr /i /v "\<字节\>" 1j.txt>原始程序.txt
del 1j.txt
del 2j.txt
-----
注:新文件.txt是改动过的作者: lxmxn 时间: 2007-10-7 23:19 批处理室已经给出方案,可以参考一下。作者: ZJHJ 时间: 2007-10-8 11:12 非常的致谢 lxmxn 先生!
你的 setlocal 和 endlocal 命令解决了
cd.>t.txt
for /f "delims=" %%i in (a.txt) do (
if not defined %%i set %%i=A & echo %%i>>t.txt
)
和
cd.>t2.txt
for /f "delims=" %%k in (a2.txt) do (
if not defined %%k set %%k=B & echo %%k>>t2.txt
)
同在一个程序的问题.
再次感谢!!
但是,还未能解决我发上来程序问题.
不过已经给我解决了一大半,用了你的 setlocal 和 endlocal 命令,将原程序做了
结构性调整,去掉了一个开展,达到了我的要求.
再次谢谢!!
2007.10.08.11