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

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

本帖最后由 pcl_test 于 2016-8-9 21:10 编辑

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

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

点击付款的就是开放式

记得开房间

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
初九的冬天

对于顶楼的数据,你希望得到的结果是什么?

TOP

本帖最后由 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
复制代码
我这个不行
初九的冬天

TOP

回复 3# 1270697389


    你没有开启变量延迟扩展,怎么可以用感叹号呢

TOP

回复 4# DAIC


    有变量延迟
初九的冬天

TOP

回复 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

评分人数

TOP

回复  1270697389 你这样执行一下,就会发现,这个 for 命令根本没有读取到空行。
DAIC 发表于 2014-2-18 15:11



    谢谢你
初九的冬天

TOP

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

评分人数

TOP

for /f 读取文本时会忽略空行,可以用findstr,这样试试:
apang 发表于 2014-2-18 15:50

你这个代码很好,能解释一下吗,我有点看不懂。谢谢
初九的冬天

TOP

回复 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
复制代码
这样执行一下,看看。

TOP

回复  1270697389 这样执行一下,看看。
DAIC 发表于 2014-2-19 08:04



    学习了,为什么set b=%%a不能放到set a=%%a的下面,谢谢!这类的我有点搞不懂,谢谢!
初九的冬天

TOP

回复 11# 1270697389


    变量a保存的是当前行的内容,变量b保存的是上一行的内容。

TOP

回复 12# DAIC

哦,谢谢你
初九的冬天

TOP

本帖最后由 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

TOP

暴力点的办法:
  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
复制代码

TOP

返回列表