找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 77094|回复: 15

[文本处理] [已解决]批处理怎样获取文本中空行的下一行

[复制链接]
发表于 2014-2-18 13:14:51 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-9 21:10 编辑

1.txt
款到即发的苟富贵
的建设路口附近的时刻
款到即发看电视

的会计法离开的时间发士大夫

点击付款的就是开放式

记得开房间

我要提取空行的下面一行,空行里面连一个空格都没有的,谢谢大家!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-2-18 13:41:28 | 显示全部楼层
对于顶楼的数据,你希望得到的结果是什么?
 楼主| 发表于 2014-2-18 13:54:14 | 显示全部楼层
本帖最后由 1270697389 于 2014-2-18 14:48 编辑

回复 2# DAIC

1.txt
款到即发的苟富贵
的建设路口附近的时刻
款到即发看电视

的会计法离开的时间发士大夫

点击付款的就是开放式

记得开房间
处理后的2.txt

的会计法离开的时间发士大夫
点击付款的就是开放式
记得开房间

我用的

  1. @echo off&setlocal enabledelayedexpansion
  2. set "n="
  3. for /f %%a in (1.txt) do (
  4. set a=%%a
  5. set /a n+=1
  6. if "!a:~0,1!" == "" (
  7. set /a r=!n!+1) else (
  8. if "!n!" == "!r!" echo %%a>>2.txt
  9. )
  10. )
  11. pause
复制代码
我这个不行
发表于 2014-2-18 14:39:26 | 显示全部楼层
回复 3# 1270697389


    你没有开启变量延迟扩展,怎么可以用感叹号呢
 楼主| 发表于 2014-2-18 14:50:22 | 显示全部楼层
回复 4# DAIC


    有变量延迟
发表于 2014-2-18 15:11:38 | 显示全部楼层
回复 5# 1270697389
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "n="
  4. for /f %%a in (a.txt) do (
  5.     echo 正在处理:%%a
  6.     echo n的值:!n!
  7.     echo r的值:!r!
  8.     set a=%%a
  9.     set /a n+=1
  10.     if "!a:~0,1!" == "" (
  11.         set /a r=!n!+1
  12.     ) else (
  13.         if "!n!" == "!r!" echo %%a
  14.     )
  15. )
  16. pause
复制代码
你这样执行一下,就会发现,这个 for 命令根本没有读取到空行。

评分

参与人数 1技术 +1 收起 理由
1270697389 + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-2-18 15:44:09 | 显示全部楼层
回复  1270697389 你这样执行一下,就会发现,这个 for 命令根本没有读取到空行。
DAIC 发表于 2014-2-18 15:11



    谢谢你
发表于 2014-2-18 15:50:07 | 显示全部楼层
for /f 读取文本时会忽略空行,可以用findstr,这样试试:
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
  3.     set "a=%%a"
  4.     setlocal enabledelayedexpansion
  5.     set "a=!a:*:=!" & set "b=!b:*:=!"
  6.     if "!b!"=="" if not "!a!"=="" echo,!a!
  7.     endlocal
  8.     set "b=%%a"
  9. )
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-2-19 07:59:35 | 显示全部楼层
for /f 读取文本时会忽略空行,可以用findstr,这样试试:
apang 发表于 2014-2-18 15:50

你这个代码很好,能解释一下吗,我有点看不懂。谢谢
发表于 2014-2-19 08:04:43 | 显示全部楼层
回复 9# 1270697389
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
  3.     echo ------------[正在处理]%%a
  4.     set "a=%%a"
  5.     setlocal enabledelayedexpansion
  6.     echo [替换之前]a的值是!a!,b的值是!b!
  7.     set "a=!a:*:=!" & set "b=!b:*:=!"
  8.     echo [替换之后]a的值是!a!,b的值是!b!
  9.     if "!b!"=="" if not "!a!"=="" echo,!a!
  10.     endlocal
  11.     set "b=%%a"
  12. )
  13. pause
复制代码
这样执行一下,看看。
 楼主| 发表于 2014-2-19 11:36:42 | 显示全部楼层
回复  1270697389 这样执行一下,看看。
DAIC 发表于 2014-2-19 08:04



    学习了,为什么set b=%%a不能放到set a=%%a的下面,谢谢!这类的我有点搞不懂,谢谢!
发表于 2014-2-19 12:35:42 | 显示全部楼层
回复 11# 1270697389


    变量a保存的是当前行的内容,变量b保存的是上一行的内容。
 楼主| 发表于 2014-2-19 13:12:38 | 显示全部楼层
回复 12# DAIC

哦,谢谢你
发表于 2015-1-22 21:16:25 | 显示全部楼层
本帖最后由 34205 于 2015-1-22 21:21 编辑

@echo off
Mode con: cols=86 lines=40

:GO
MD temp\
cd temp\
Cls
echo =======说明区========
Echo bat怎样提取空行的下一行
Echo.
echo =======代码区========

:inword
Echo 111111111 >测试A.txt
Echo 246 42236436 >>测试A.txt

Echo 246333333 3333333 >>测试A.txt
echo;>>测试A.txt
Echo 23624 426243723462346 >>测试A.txt
Echo 00000000000>>测试A.txt


:Start
for /f "delims=" %%a in ('findstr /n .* 测试a.txt') do (
        echo.
    echo ------------[正在处理]%%a  .............
        echo.
    set "a=%%a"
    setlocal enabledelayedexpansion
    echo [替换之前]a的值是----!a!,b的值是----!b!
        Ping -n 1 127.1>nul
    set "a=!a:*:=!" & set "b=!b:*:=!"
    echo [替换之后]a的值是----!a!,b的值是----!b!
        Ping -n 1 127.1>nul
    if "!b!"=="" if not "!a!"=="" echo,!a!
    endlocal
    set "b=%%a"
)


echo =======退出区=======
:Out
echo.
echo 退出.......
Ping -n 30 127.1>nul
exit /b
发表于 2015-1-22 23:55:32 | 显示全部楼层
暴力点的办法:
  1. @echo off
  2. (
  3.         set /p"="
  4.         for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
  5.                 set "当前行=%%a"
  6.                 set /p "下一行="
  7.                 setlocal enabledelayedexpansion
  8.                 if "!当前行:*:=!"=="" echo,!下一行!
  9.                 endlocal
  10.         )
  11. )<1.txt
  12. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 06:39 , Processed in 0.035863 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表