中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: [已结]变量延时新问题 上一主题 | 下一主题
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『楼 主』:  [已结]变量延时新问题 使用 LLM 解释/回答一下

在下面程序中多次启用变量延时并及时退出。在程序的开始也设置有变量延时退出,问题是这样的:启用程序功能一切正常并且结果正确。如果返回主界面,再继续重新执行,却没有结果。但是只要将程序关闭,重新启用程序,得到的结果又是正确的。我找不出问题所在,敬请大师帮忙解答!!!!

Last edited by ZJHJ on 2010-6-27 at 23:01 ]


2010-6-24 17:13
查看资料  发短消息  网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

程序呢?




2010-6-24 22:14
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

程序是我自己写的,由于水平有限,只考虑了功能,没有考虑优化和临时文件。
见笑了。谢谢各位指点.....!

:gggf
@echo off
@echo 
endlocal EnableDelayedExpansion
cls
::wangwei QQ 251485609 081106
echo.
echo 本程序检查两个文本文档的内容变化(not带exe混合型)
@echo.
@echo a 纯文本文档内容变化检查(列出原始行和变化行)
@echo.
@echo b 程序文件路径快照检查(作并列比较列出)
@echo.
set /p yswj= 将要对比的原始文件拉入:
@echo.
set /p xwj= 将新文件拉入:
@echo 检查时间: %date% %time% (单行为新增文件)>对比结果.txt
copy %yswj% y.txt
copy %xwj% x.txt
::测y.txt大小
for /f "delims=" %%a in ('dir /b /s /a-d y.txt') do set dx=%%~za
::测y.txt原文件行数
for /f "tokens=2 delims=:" %%i in ('find /v /c "" y.txt') do set ydx=%%i
@echo 原文件%ydx%行,%dx%字节>>对比结果.txt
::为了缩短时间先用fc对比
cd.>fc1.txt
fc y.txt x.txt /l >>fc1.txt
cd.>yy.txt
cd.>xx.txt
cls
::从fc1.txt中分割文件
echo off & setlocal EnableDelayedExpansion
for /f "skip=1 delims=" %%a in (fc1.txt) do (
if "%%a" equ "***** y.txt" (set fname=yy) else if "%%a" equ "***** X.TXT" (set fname=xx) else (
>>!fname!^.txt echo %%a
)
)
::endlocal EnableDelayedExpansion
::setlocal EnableDelayedExpansion
if not exist %windir%\wwxm del %0
del fc1.txt
::保留xx.txt与yy.txt之不同(改变行)
cd.>tem.txt
for /f "delims=" %%i in (yy.txt) do SET %%i=A
for /f "delims=" %%j in (xx.txt) do if /I not defined %%j echo %%j>>tem.txt
endlocal EnableDelayedExpansion
::检查是否有.exe
findstr /i /r /c:".exe" "tem.txt" >nul 2>nul
if %errorlevel%==1 goto wbjg
::保留yy.txt与xx.txt之不同(原始行)
cd.>ytem.txt
for /f "delims=" %%i in (xx.txt) do SET %%i=A
for /f "delims=" %%j in (yy.txt) do if /I not defined %%j echo %%j>>ytem.txt
::清除*****
cd.>xxx.txt
findstr /i /v "*****" tem.txt>>xxx.txt
::做标记为对齐
cd.>x.txt
for /f "delims=" %%i in (xxx.txt) do >>x.txt echo ★%%i
cd.>y.txt
for /f "delims=" %%i in (ytem.txt) do >>y.txt echo %%i
del yy.txt
del xx.txt
del xxx.txt
::合并
copy y.txt + x.txt xxx.txt
del y.txt
del ytem.txt
cls
::提取程序名
cd.>tem1.txt
for /f "delims=" %%a in (x.txt) do echo %%~nxa>>tem1.txt
cd.>tem.txt
for /f "tokens=2 delims= " %%i in (tem1.txt) do echo %%i>>tem.txt
for /f "tokens=*" %%a in (tem.txt) do (
if not "%%~za"=="0" goto ykg
)
for /f %%i in (tem1.txt) do (
findstr /i /r /c:"\<%%i\>" xxx.txt>>对比结果.txt
@echo.>>对比结果.txt
)
goto jcjs
:ykg
::用程序名查找并排列对比显示
for /f %%i in (tem.txt) do (
findstr /i /r /c:"\<%%i\>" xxx.txt>>对比结果.txt
@echo.>>对比结果.txt
)
:jcjs
@echo 结束时间: %time%>>对比结果.txt
echo 
del tem.txt
del tem1.txt
del xxx.txt
del x.txt
start 对比结果.txt
goto gggf

:wbjg
@echo 检查时间: %date% %time% 原文件%ydx%行,%dx%字节>对比结果.txt
@echo 原始文件内容:>>对比结果.txt
::保留yy.txt与xx.txt之不同行
for /f "delims=" %%i in (xx.txt) do SET %%i=A
for /f "delims=" %%j in (yy.txt) do if /I not defined %%j echo %%j>>对比结果.txt
@echo.>>对比结果.txt
@echo 被改变的内容:>>对比结果.txt
::清楚*****
findstr /i /v "*****" tem.txt>>对比结果.txt
@echo 运行结束时间: %time%>>对比结果.txt
echo 
del tem.txt
del x.txt
del y.txt
del xx.txt
del yy.txt
start 对比结果.txt
@goto gggf


Last edited by ZJHJ on 2010-6-24 at 22:45 ]


2010-6-24 22:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

为了学习知识继续求助帮忙分析问题!


2010-6-26 11:29
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

已经把代码缩减,找到问题出在的地方,是tem.txt无法写入,为什么这个命令只能用一次??
:gggf
@echo off
@echo.
set /p yswj= 将要对比的原始文件拉入:
@echo.
set /p xwj= 将新文件拉入:
copy %yswj% y.txt
copy %xwj% x.txt
::为了缩短时间先用fc对比
cd.>fc1.txt
fc y.txt x.txt /l >>fc1.txt
cd.>yy.txt
cd.>xx.txt
cls
::从fc1.txt中分割文件
echo off
setlocal EnableDelayedExpansion
for /f "skip=1 delims=" %%a in (fc1.txt) do (
if "%%a" equ "***** y.txt" (set fname=yy) else if "%%a" equ "***** X.TXT" (set fname=xx) else (
>>!fname!^.txt echo %%a
)
)
del fc1.txt
cd.>tem.txt
for /f "delims=" %%i in (yy.txt) do SET %%i=A
for /f "delims=" %%j in (xx.txt) do if /I not defined %%j echo %%j>>tem.txt
endlocal EnableDelayedExpansion
@echo 原始文件内容:>对比结果.txt
::保留yy.txt与xx.txt之不同行
for /f "delims=" %%i in (xx.txt) do SET %%i=A
for /f "delims=" %%k in (yy.txt) do if /I not defined %%k echo %%k>>对比结果.txt
@echo.>>对比结果.txt
@echo 被改变的内容:>>对比结果.txt
::清楚*****
findstr /i /v "*****" tem.txt>>对比结果.txt
echo 
del tem.txt
del x.txt
del y.txt
del xx.txt
del yy.txt
start 对比结果.txt
@goto gggf


2010-6-27 11:26
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

原因很简单你 SET %%i=A 设置的变量没有清除

第一对比出来结果了,但是变量保存了,你第二次执行,这些内容已经在变量里面了,所以你执行not defined 比较,他们自然都defined,所以没有输出。




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-6-27 14:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

那为什么在‘原始文件内容 ’那个代码又能写入呢?可是在3L的代码中,也试过退出后 再加入的呀,也同样没有反应。我也试过,第一次运行后,把 SET %%i=A 修改为 SET %%i=B 结果也同样没有反应。
我知道,如果第一个比较后,必须退出,第二个比较才能写入。所以第一次运行结果全是正确的。我也这样试过,在第一次运行后返回界面,加入变量延时,再退出,结果同样无效。

那么,怎样才能在第一次运行后,把设置的变量清除呢?


2010-6-27 16:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

SET 华丽丽的前缀_%%i=A

……

清理阶段
for /f %%i in ('set 华丽丽的前缀_') do set %%i=




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-6-27 19:26
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

唉,我就是很很笨,还是不会弄。
就把下面的帮我弄成现成的吧!
for /f "delims=" %%i in (yy.txt) do SET %%i=A
for /f "delims=" %%j in (xx.txt) do if /I not defined %%j echo %%j>>tem.txt


2010-6-27 20:58
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  …………………… 使用 LLM 解释/回答一下

for /f "delims=" %%i in (yy.txt) do SET 华丽丽的前缀_%%i=A
for /f "delims=" %%j in (xx.txt) do if /I not defined 华丽丽的前缀_%%j echo %%j>>tem.txt


for /f "delims=" %%i in (xx.txt) do SET 华丽丽的前缀_%%i=A
for /f "delims=" %%k in (yy.txt) do if /I not defined 华丽丽的前缀_%%k echo %%k>>对比结果.txt



del yy.txt
for /f "delims==" %%i in ('set 华丽丽的前缀_') do set %%i=
start 对比结果.txt
@goto gggf


   此帖被 +8 点积分        点击查看详情   
评分人:【 ZJHJ 分数: +8  时间:2010-6-27 22:59




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-6-27 22:19
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

非常谢谢 slore 的帮助!!可以了。不要见笑,我确实没有见过。


2010-6-27 22:58
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: