Board logo

标题: 如何获得总行数,并循环显示4行且到显示完所有行? [打印本页]

作者: ngela     时间: 2007-3-24 08:17    标题: 如何获得总行数,并循环显示4行且到显示完所有行?

循环我不会……教一下呀。
作者: lxmxn     时间: 2007-3-24 08:36

以for为关键字搜索一下论坛。

作者: ngela     时间: 2007-3-25 07:31
看了啊,可是就是不会写,改写你的readline.bat也不行……
作者: lxmxn     时间: 2007-3-25 07:34

是每次显示4行,然后按任意键显示下面的4行吗?

作者: everest79     时间: 2007-3-25 08:33
for /f "delims=" %%i in ('find /n /v "" text.txt') do (
echo %%i
set /a l+=1,1/^(l%%4^)||pause>nul
)
作者: axi     时间: 2007-3-25 12:16
楼上方法出现 以零数为除数的错误 提示,请问何解,如何解决?

[ Last edited by axi on 2007-3-24 at 11:17 PM ]
作者: slore     时间: 2007-3-25 12:29
4的倍数的话余数是0啊
@echo off
set l=-1
for /f "delims=" %%i in ('find /n /v "" text.txt') do (
echo %%i

set /a l+=1,1/^(l%%4^) 2>nul||pause>nul
)

作者: axi     时间: 2007-3-25 21:28
楼上代码只显示 ---------- text.txt  没有下文? 另外,如何才不把文件名也显示出来,因为此行内容不是文本中的第一行呀,请赐教?

[ Last edited by axi on 2007-3-25 at 08:34 AM ]
作者: everest79     时间: 2007-3-25 21:59
这样子,加了点效果,嘿嘿
@echo off
for /f "skip=2 delims=" %%i in ('find /n /v "" load.ini') do (
echo %%i
set/p=-- More --<nul
set /a l+=1,1/^(l%%4^) 2>nul||pause>nul
set/p=<nul
)

pause>nul

作者: xycoordinate     时间: 2007-3-25 23:57
set /a l+=1,1/^(l%%4^) 2>nul||pause>nul

l和1分不清!!!
作者: everest79     时间: 2007-3-26 00:04
介个不是学习前辈们的灰色吗
作者: ccwan     时间: 2007-3-26 00:20


  Quote:
set /a l+=1,1/^(l%%4^) 2>nul||pause>nul

这个方法用的妙!
作者: axi     时间: 2007-3-26 01:10
直接复制 7楼代码的第二行得到 set l=-1 修改为 set l=-l 或者 set 1=-1 就可以。 领教高手的教学方式,多谢楼上各位!

[ Last edited by axi on 2007-3-25 at 01:00 PM ]
作者: everest79     时间: 2007-3-26 01:13


  Quote:
Originally posted by ccwan at 2007-3-25 11:20 AM:

这个方法用的妙!

谢谢大哥夸奖,嘿嘿
作者: slore     时间: 2007-3-26 02:00


  Quote:
Originally posted by everest79 at 2007-3-25 12:13:


谢谢大哥夸奖,嘿嘿

:P还不知道说谁的呢: )
作者: everest79     时间: 2007-3-26 02:16


  Quote:
Originally posted by slore at 2007-3-25 01:00 PM:



:P还不知道说谁的呢: )

咱们俩谁跟谁呀
作者: bjsh     时间: 2007-3-26 03:23
@echo off & setlocal enabledelayedexpansion
set /a c=0
for /f "tokens=1 delims=" %%a in ('find /n /v "" test.txt') do set /a c+=1 & echo %%a && if "!c!"=="4" set /a c=0 & pause >>nul

何必非得去判断是4的倍数呢

[ Last edited by bjsh on 2007-3-25 at 02:25 PM ]
作者: ccwan     时间: 2007-3-26 05:04
这个也很好,加上skip=2就可以不显示文件名只显示文本内容了
作者: lxmxn     时间: 2007-3-26 09:32


  Quote:
Originally posted by bjsh at 2007-3-25 14:23:
@echo off & setlocal enabledelayedexpansion
set /a c=0
for /f "tokens=1 delims=" %%a in ('find /n /v "" test.txt') do set /a c+=1 & echo %%a && if "!c!&qu ...


  其实质还是4的倍数,只不过到了4就初始为0了,原理没有变。

作者: everest79     时间: 2007-3-26 09:56
只是单纯的判断的话,if要比使用set的方法快一倍左右的时间,但CPU也高一倍,若本身已经在使用set来计算,那么,反而效率会理快一点,总之一句话,不同地点不同应用
作者: lxmxn     时间: 2007-3-26 13:41

 
  我也来灌一水~~
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION

SET A=1
FOR /F "TOKENS=1* DELIMS=:" %%A IN ('FINDSTR /N .* TEST.TXT') DO (
        ECHO/%%B
        SET/A B=!A!%%4
        IF !B! EQU 0 (ECHO/任意键显示下4行的内容&PAUSE>NUL)
        SET/A A+=1
)
PAUSE&EXIT/B

作者: axi     时间: 2007-3-27 00:38
我想在批处理上创建楼上的批处理(如下),为何不成功呢? 其中 %% 不能创建。

echo @ECHO OFF^&SETLOCAL ENABLEDELAYEDEXPANSION >a.bat
echo SET A=1 >>a.bat
echo FOR /F "TOKENS=1* DELIMS=:" ^%^%A IN ('FINDSTR /N .* TEST.TXT') DO ( >>a.bat
echo         ECHO/^%^%B >>a.bat
echo         SET/A B=!A!^%^%4 >>a.bat
echo         IF !B! EQU 0 (ECHO/任意键显示下4行的内容^&PAUSE^>NUL) >>a.bat
echo         SET/A A+=1 >>a.bat
echo ) >>a.bat
echo PAUSE^&EXIT/B >>a.bat
作者: lxmxn     时间: 2007-3-27 00:47

To axi:

  如果要创建%%,需要用%%%%来代替。

作者: axi     时间: 2007-3-27 01:34
明解,多谢!
作者: lxmxn     时间: 2007-3-27 01:40

To axi:

  兄还可以将以下语句加在21楼代码的前面,直接运行时可以执行:Write下面的代码,带参数运行可以达到你的写入文件的目的。
@if "%1"=="" (@goto :Write) else (@more +2 %0>>%~dp0new.bat&start notepad %~dp0new.bat&goto :eof)
:Write

作者: axi     时间: 2007-3-27 02:36
@more +2 %0>>%~dp0new.bat

简单的一句就可以创建 :Write 下的内容,比起我哪种方法好多。

[ Last edited by axi on 2007-3-26 at 02:20 PM ]
作者: peterdocter     时间: 2007-3-27 05:06
IF !B! EQU 0 (ECHO/任意键显示下4行的内容&PAUSE>NUL)
IF !B! EQU 0 (ECHO/任意键显示下4行的内容&echo %%B>>number.txt)
为什么?生成文件时就出少一行?
uoarlykb
ifkmpcwg
kzllmbms
为什么用了变量延迟功能,也不能用>一次就生成四个内容?非要用>>追加符不何?

[ Last edited by peterdocter on 2007-3-27 at 05:08 AM ]
作者: ngela     时间: 2007-3-29 02:22
多谢啦,解决了.