![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 03:35 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]变量延时新问题 |
| 可打印版本 1,002 / 10 |
| 第1楼 ZJHJ | 发表于 2010-06-24 17:13 |
| 高级用户 发帖 374 积分 609 | |
|
[已结]变量延时新问题 在下面程序中多次启用变量延时并及时退出。在程序的开始也设置有变量延时退出,问题是这样的:启用程序功能一切正常并且结果正确。如果返回主界面,再继续重新执行,却没有结果。但是只要将程序关闭,重新启用程序,得到的结果又是正确的。我找不出问题所在,敬请大师帮忙解答!!!!
[ Last edited by ZJHJ on 2010-6-27 at 23:01 ] |
|
| 第2楼 HAT | 发表于 2010-06-24 22:14 |
| 版主 发帖 5,017 积分 9,023 | |
|
程序呢?
|
|
| 第3楼 ZJHJ | 发表于 2010-06-24 22:27 |
| 高级用户 发帖 374 积分 609 | |
|
程序是我自己写的,由于水平有限,只考虑了功能,没有考虑优化和临时文件。
见笑了。谢谢各位指点.....! [ Last edited by ZJHJ on 2010-6-24 at 22:45 ] |
|
| 第4楼 ZJHJ | 发表于 2010-06-26 11:29 |
| 高级用户 发帖 374 积分 609 | |
|
为了学习知识继续求助帮忙分析问题!
|
|
| 第5楼 ZJHJ | 发表于 2010-06-27 11:26 |
| 高级用户 发帖 374 积分 609 | |
|
已经把代码缩减,找到问题出在的地方,是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 |
|
| 第6楼 slore | 发表于 2010-06-27 14:20 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
原因很简单你 SET %%i=A 设置的变量没有清除
第一对比出来结果了,但是变量保存了,你第二次执行,这些内容已经在变量里面了,所以你执行not defined 比较,他们自然都defined,所以没有输出。 |
|
| 第7楼 ZJHJ | 发表于 2010-06-27 16:40 |
| 高级用户 发帖 374 积分 609 | |
|
那为什么在‘原始文件内容 ’那个代码又能写入呢?可是在3L的代码中,也试过退出后 再加入的呀,也同样没有反应。我也试过,第一次运行后,把 SET %%i=A 修改为 SET %%i=B 结果也同样没有反应。
我知道,如果第一个比较后,必须退出,第二个比较才能写入。所以第一次运行结果全是正确的。我也这样试过,在第一次运行后返回界面,加入变量延时,再退出,结果同样无效。 那么,怎样才能在第一次运行后,把设置的变量清除呢? |
|
| 第8楼 slore | 发表于 2010-06-27 19:26 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
SET 华丽丽的前缀_%%i=A
…… 清理阶段 for /f %%i in ('set 华丽丽的前缀_') do set %%i= |
|
| 第9楼 ZJHJ | 发表于 2010-06-27 20:58 |
| 高级用户 发帖 374 积分 609 | |
|
唉,我就是很很笨,还是不会弄。
就把下面的帮我弄成现成的吧! 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 |
|
| 第10楼 slore | 发表于 2010-06-27 22:19 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
…………………… 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 |
|
| 第11楼 ZJHJ | 发表于 2010-06-27 22:58 |
| 高级用户 发帖 374 积分 609 | |
|
非常谢谢 slore 的帮助!!可以了。不要见笑,我确实没有见过。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |