[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
强调顺序的呵呵。

TOP

还是一样呀,,怎么办?你测试可以吗?

TOP

刚才百度了一下,了解了,我试试。

[ 本帖最后由 lj84831253 于 2010-4-24 14:12 编辑 ]

TOP

先用:
  1. for /f "delims=" %%i in ('type b.txt') do >>b-.txt echo %%i
复制代码
把b.txt处理了
或者把4楼的改成:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set a%%a=%%b&set x1=%%a
  3. for /f "tokens=1* delims=:" %%a in ('type b.txt^|findstr /n .*') do set b%%a=%%b&set x2=%%a
  4. set /a x=!x1!*!x2!,xx1=1,xx2=1
  5. for /l %%a in (1 1 !x!) do (
  6. call :xx
  7. set/a xx1+=1,xx2+=1
  8. if !xx1! gtr !x1! set xx1=1
  9. if !xx2! gtr !x2! set xx2=1
  10. )
  11. pause
  12. :xx
  13. call echo.%%a%xx1%%%%%b%xx2%%%
复制代码
如果不强调顺序,可以直接:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do for /f "delims=" %%b in ('type b.txt') do echo.%%a%%b
  3. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-24 14:09 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

我听不懂呀,,唉,我菜。请问那该怎么解决呢?

TOP

b.txt  有问题里面隐含了换行符
代码没问题

TOP

回复 11楼 的帖子

你的b.txt是从Linux系统里面导出来的?行尾不是CRLF,只是一个LF,所以BAT处理的时候出错了。

TOP

急求呀,,正在写脚本,,碰到坎儿了。。。

TOP

为什么我测试不成功啊?请大家下载附件也测试下。(PS:a.txt和b.txt里边都没重复行。)

TOP

回复 7楼 的帖子

不加*只能取到第一列,肯定不行。
call跟变量延迟扩展有关系,参考:
http://bbs.bathome.net/thread-2899-1-1.html

TOP

原帖由 x9tiancmd 于 2010-4-23 15:17 发表
@echo off&setlocal enabledelayedexpansion
for  /f  "tokens=1* delims=:" %%i in ('findstr /n ".*" b.txt')  do set b=%%i&set b_%%i=%%j
for  /f  "tokens=1* delims=:" %%i in ('findstr /n ".*" a.txt')  do  if %%i leq %b% (echo.%%j!b_%%i! ) else (set/a num=%%i-b&call echo.%%j%%b_!num!%%)

1,如果不考虑顺序,直接for /f套for /f就可以
2,如果需要按1楼给出的顺序输出,那么显然a和b的文本都被循环了多次,所以两次解析文本时,都应该只定义为变量。然后在根据乘后的积使用for /l(实际就是变相for /f套for /f)。
3,你写的代码,就只for /f了一次,所以只输出a文本的行数。。。

[ 本帖最后由 hanyeguxing 于 2010-4-24 15:41 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for  /f  "tokens=1* delims=:" %%i in ('findstr /n ".*" b.txt')  do set b=%%i&set b_%%i=%%j
  3. for  /f  "tokens=1* delims=:" %%i in ('findstr /n ".*" a.txt')  do  if %%i leq %b% (echo.%%j!b_%%i! ) else (set/a num=%%i-b&call echo.%%j%%b_!num!%%)
复制代码
    ╭╩═╮
╭╯G O ╠ 雁过留声
╰⊙═⊙╯

TOP

原帖由 GNU 于 2010-4-23 14:07 发表
这是tokens=1*和findstr /n联合使用的一个典型例子,%%a是findstr /n加上的行号,%%b是行号后面的整行内容。

如果这里不加*号可以吗?为什么要加一个*号?
还有,最后一句call echo 那里好多百分号,,能帮我讲解一下吗?直接echo.a%xx1%b%xx2%不可以吗?
谢谢。

TOP

回复 5楼 的帖子

这是tokens=1*和findstr /n联合使用的一个典型例子,%%a是findstr /n加上的行号,%%b是行号后面的整行内容。

TOP

请问tokens=1*是什么意思?谢谢!!

[ 本帖最后由 lj84831253 于 2010-4-23 13:41 编辑 ]

TOP

返回列表