[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
答案一:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=:" %%i in ('findstr /n "abcd" a.txt') do (
  3.     set a=%%i
  4.     set /a a-=1
  5.     for /f "tokens=1,2 delims=:" %%m in ('findstr /n .* a.txt') do if %%m==!a! echo %%n
  6.     echo %%j
  7. )
  8. pause
复制代码


答案二:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=:" %%i in ('findstr /n "abcd" a.txt') do (
  3.     set a=%%i
  4.     set /a a-=1
  5.     for /f "tokens=1,2 delims=:" %%m in ('findstr /n .* a.txt') do if %%m==!a! echo %%n
  6.     echo %%j
  7.     set b=%%i
  8.     set /a b+=1
  9.     for /f "tokens=1,2 delims=:" %%x in ('findstr /n .* a.txt') do if %%x==!b! echo %%y
  10. )
  11. pause
复制代码
(*^_^*)

TOP

  1. @echo off
  2. for /f "tokens=1* delims=:" %%c in ('findstr /n /b "abcd" a.txt') do call :zd n %%c %%d
  3. pause
  4. goto :eof
  5. :zd
  6.  set %1=%2
  7.  set/a m=%n%-1
  8.  for /f "tokens=1* delims=:" %%i in ('findstr /n . a.txt') do call :s2 f %%i %%j
  9.  goto :eof
  10. :s2
  11.  set %1=%2
  12.  if %f%==%m% echo %3
  13.  if %f%==%n% echo %3&echo.
复制代码
上为两行,下为三行的。上下思路没改
  1. @echo off
  2. for /f "tokens=1* delims=:" %%c in ('findstr /n /b "abcd" a.txt') do call :zd n %%c %%d
  3. pause
  4. goto :eof
  5. :zd
  6.  set %1=%2
  7.  set/a m=%n%-1
  8.  set/a k=%n%+1
  9.  for /f "tokens=1* delims=:" %%i in ('findstr /n . a.txt') do call :s2 f %%i %%j
  10.  goto :eof
  11. :s2
  12.  set %1=%2
  13.  if %f%==%m% echo %3
  14.  if %f%==%n% echo %3
  15.  if %f%==%k% echo %3&echo.
复制代码

顺便问下,我怎么给别人评分阿?

[ 本帖最后由 wxcute 于 2008-9-15 19:00 编辑 ]

TOP

不会!

学习中!!!!!!!

TOP

@echo off
setlocal enabledelayedexpansion
set n=0
set before=不存在
set beforebefore=不存在
for /f "delims=" %%i in (a.txt) do (
    set cur=%%i
    if "!before:~0,4!"=="abcd" (
        echo ------------
        echo 上一行:!beforebefore!
        echo 当前行:!before!
        echo 下一行:%%i
        echo _____________
    )
    set beforebefore=!before!
    set before=!cur!
)

这是第二道题目,第一个更简单哦

TOP

哇,这个好难

TOP

只用一个for完成要求2
cls&@echo off&setlocal enabledelayedexpansion
set a1=不存在&set a2=不存在
for /f "tokens=*" %%i in (a.txt) do (
   
set a0=!a1!&set a1=!a2!&set a2=%%i
   
if "!a1:~0,4!" equ "abcd" echo 上一行:  !a0!&echo abcd开头:!a1!&echo 下一行:  !a2!&echo.
)
if "%a2:~0,4%" equ "abcd" echo 上一行:  !a1&echo abcd开头:!a2!&echo 下一行:  不存在&echo.
pause&goto:eof

运行结果

上一行:  上dfhgjs正确
abcd开头:abcddfja;正确
下一行:  sdfg下正确

上一行:  sg上fg正确
abcd开头:abcd正确
下一行:  sdfg下gf正确

上一行:  上fdg正确dsfg
abcd开头:abcddkfja
下一行:  dfsg下dfsg正确

上一行:  sdghj上dfg正确
abcd开头:abcd正确
下一行:  sdg下sdg正确

请按任意键继续. . .
1

评分人数

    • sjzong: 厉害,但是第七行代码中的“!a1”,应该改为 ...PB + 4
高手=发现问题^分析问题^解决问题

TOP

呵呵,又是这道题啊。
***共同提高***

TOP

要求一:显示a.txt中以 abcd 开头的行和它的上一行。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type a.txt') do (
  4.    set /a n+=1,m=n-1
  5.    set _!n!=%%a
  6.    set str=%%a
  7.    if "!str:~,4!"=="abcd" call echo %%_!m!%%&call echo %%_!n!%%
  8. )
  9. pause
复制代码
要求二:显示a.txt中以 abcd 开头的行和它的上一行及下一行。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type a.txt') do (
  4.    set /a a+=1
  5.    set _!a!=%%a
  6. )
  7. for /f "delims=" %%a in ('type a.txt') do (
  8.    set /a n+=1,o=n+1,m=n-1
  9.    set _!n!=%%a
  10.    set str=%%a
  11.    if "!str:~,4!"=="abcd" call echo %%_!m!%%&call echo %%_!n!%%&call echo %%_!o!%%
  12. )
  13. pause
复制代码
1

评分人数

TOP

呵呵,不错,加分鼓励!
但可以更简洁,支持一题多解。
争取在一个for里循环一次就完成。
技术问题请到论坛发帖求助!

TOP

哦,终于弄明白了,我没有看到n在变化.....
谢谢!!!

TOP

  1. :: 在标签:loop处,我用了
  2. set /a n+=1
  3. :: 相当于FOR 语句每处理一行N值递增1.
  4. set /a count=!n!-2
  5. :: 然后把n-2赋值给变量count
复制代码
Welcome back to the world, grab a spoon - old friends

TOP

set /a count=!n!-2
for /f "skip=%count% tokens=*" %%j in (a.txt) do (.....
其中的conut在loop循环时一直为零,直到call   :up时值才改变,楼主可否解释一下这个count,我有点搞不懂......

TOP

我的答案:
要求一
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. set count=0
  5. goto :loop
  6. :up
  7. set /a count=!n!-2
  8. for /f "skip=%count% tokens=*" %%j in (a.txt) do (
  9.     echo %%j>>b.txt
  10.     goto :eof
  11.     )
  12. :loop
  13. for /f "tokens=*" %%i in (a.txt) do (
  14.     set /a n+=1
  15.     set temp=%%i
  16.     if "!temp:~0,4!"=="abcd" (
  17.     echo %%i>>b.txt
  18.     call :up
  19.     )
  20.     )
  21. start b.txt
复制代码
要求二
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. set count=0
  5. goto :loop
  6. :up
  7. set /a count=!n!-2
  8. for /f "skip=%count% tokens=*" %%j in (a.txt) do (
  9.     echo %%j>>b.txt
  10.     goto :eof
  11.     )
  12. :low
  13. set /a count=!n!
  14. for /f "skip=%count% tokens=*" %%j in (a.txt) do (
  15.     echo %%j>>b.txt
  16.     goto :eof
  17.     )
  18. :loop
  19. for /f "tokens=*" %%i in (a.txt) do (
  20.     set /a n+=1
  21.     set temp=%%i
  22.     if "!temp:~0,4!"=="abcd" (
  23.     echo %%i>>b.txt
  24.     call :up
  25.     call :low
  26.     )
  27.     )
  28. start b.txt
复制代码
如果原文件以abcd开头行出现的位置<2的话就要加判断语句,否则会报错.
不过按照楼主的a.txt文件,我测试是通过的.

[ 本帖最后由 springcm 于 2008-6-2 07:59 编辑 ]
1

评分人数

TOP

返回列表