中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-27 15:24
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,276 会员排行
DOS批处理 & 脚本技术(批处理室) » 两个文本跳行输出(难题)
可打印版本  2,640 / 24
第16楼 bat-zw 发表于 2008-04-01 20:38
金牌会员 发帖 1,276 积分 3,105
Originally posted by terse at 2008-4-1 16:35:
我来一个 虽然多一FOR 但有效 怎么多个%%I
@echo off
for /f "delims=" %%i in (a.txt) do >>c.txt echo %%i&call :loop
for /f "delims=" %%i in (b.txt) do i ...

学习!!!!!!!!!!
第17楼 bat-zw 发表于 2008-04-01 21:37
金牌会员 发帖 1,276 积分 3,105
@echo off
for /f "delims=" %%i in (a.txt) do >>c.txt echo %%i&call :loop
for /f "delims=" %%i in (b.txt) do if not defined %%i echo %%i>>c.txt
pause
goto :eof
:loop
for /f "delims=" %%i in (b.txt) do if not defined %%i set %%i=A &>>c.txt echo %%i&goto :eof

 不好意思,为了得到提高,本人虽然水平有限,还是试着解释这段代码如下:
 第一个for循环表示从a.txt中依次读取每行,每读取一行就把这行添加输入到c.txt中然后跳转到第二个for循环中;
 第二个for循环的意思是依次读取b.txt中每一行,每读一行就把存在于循环中%%i变量(第二个for循环的%%i),在b.txt中这行中查找一次,如果没发现就把这一行改变变量名为A并添加输入到c.txt中,然后结束再开始第一个for循环,这样后面的每次循环就不会查找这一行了(其变量名为A而不是%%i);
 而当第一个大循环也就是第一和第二个for循环结束后,便开始了第三个for语句的循环,在这个for循环中就是一行行地对b.txt查找在当前循环中是否有变量%%i(同样行,其余的行的变量名都变成A了)的存在,如没有就添加输入到c.txt中。
 真的好难解释啊!!!!!!!!!!!!
 总结:trse巧妙的将三个for循环中的变量都命名为%%i,同时反复运用 if (not) defined语句进行查找识别,成功的实现了对a.txt和b.txt跳行并不丢失行的输出,实在是高,佩服!!!
第18楼 26933062 发表于 2008-04-01 21:40
银牌会员 发帖 879 积分 2,268
原来是在不知道哪个文件行数多的情况下
如此把2楼代码稍作修改即可达到楼主的要求
:
另外: 2 楼的第一个代码到底哪里不行?怎么不通用?

[ Last edited by 26933062 on 2008-4-1 at 09:43 PM ]
第19楼 bat-zw 发表于 2008-04-01 21:46
金牌会员 发帖 1,276 积分 3,105
感谢兄弟对本贴的多次关注:
Originally posted by 26933062 at 2008-4-1 21:40:
原来是在不知道哪个文件行数多的情况下
如此把2楼代码稍作修改即可达到楼主的要求
:
第20楼 26933062 发表于 2008-04-01 21:51
银牌会员 发帖 879 积分 2,268
代码有问题?
我测试没问题啊?
你测试有什么问题?说说啊?
第21楼 balinger 发表于 2008-04-01 21:58
中级用户 发帖 115 积分 356
14楼的思路的确奇妙,令人佩服!
不过还有个小问题,如果 b.txt 中有相同的行,就会出错。
第22楼 topmcs 发表于 2008-04-02 11:58
初级用户 发帖 16 积分 25 来自 湖南
高手!!!!!!!!!11
第23楼 terse 发表于 2008-04-02 12:50
银牌会员 发帖 946 积分 2,404
Originally posted by balinger at 2008-4-1 21:58:
14楼的思路的确奇妙,令人佩服!
不过还有个小问题,如果 b.txt 中有相同的行,就会出错。

确实如此 改这样
@echo off
for /f "delims=" %%i in (a.txt) do echo %%i&call :loop
for /f "%n% delims=" %%i in (b.txt) do echo %%i
pause
goto :eof
:loop
for /f "%n% tokens=1* delims=:" %%i in ('findstr /n .* "b.txt"') do set n=skip=%%i &echo %%j&goto :eof
第24楼 bat-zw 发表于 2008-04-02 13:51
金牌会员 发帖 1,276 积分 3,105
高!!!!!!!!!!!!!
for /f "%n% tokens=1* delims=:" %%i in ('findstr /n .* "b.txt"') do set n=skip=%%i &echo %%j&goto :eof
使用"delims=:" "findstr /n" "%%n=skip=%%i" 把%%i变量变为行号,思路的确是太广了。

[ Last edited by zw19750516 on 2008-4-2 at 01:55 PM ]
第25楼 bat-zw 发表于 2008-04-02 21:26
金牌会员 发帖 1,276 积分 3,105
基本在一个大循环解决问题的方案:
通用范围为1-999行


[ Last edited by zw19750516 on 2008-4-2 at 11:47 PM ]
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023