标题: [文本处理] [已解决]以下批处理如何实现删除最后一行的空行? [打印本页]
作者: Dana 时间: 2011-10-17 09:20 标题: [已解决]以下批处理如何实现删除最后一行的空行?
多谢 xudaweb 帮助, 以下代码如何实现删除最后一行的空行? 原始文件见附件, ( 需要处理最后的空行)
代码的作用是批量提取txt 文件中的前25行, 并且覆盖原文件. 但是修改后, 实际需要25行, 但是脚本由于echo输出将会输出26行, 最后一行为空行, 想在原有的基础上删除最后一行的空行.
是否是曾加一个判断? if !Line! equ !N! set /p 后面的不会写了......echo,!Var:*:=!- @echo off
- set N=25
- if not exist %1 exit
- if not defined N exit
-
- findstr /n .* %1> "%temp%\tmp"
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a Line = Var
- SetLocal EnableDelayedExpansion
- if !Line! leq !N! echo,!Var:*:=!
- EndLocal
- )
- ) > %1
- del "%temp%\tmp"
复制代码
作者: FOR 时间: 2011-10-17 10:52
- @echo off
- set N=25
- if not exist %1 exit
- if not defined N exit
-
- findstr /n .* %1> "%temp%\tmp"
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a Line = Var
- SetLocal EnableDelayedExpansion
- if defined flag echo,
- if !Line! leq !N! set /p=!Var:*:=!
- EndLocal
- set flag=a
- )
- )<nul> %1
- del "%temp%\tmp"
复制代码
作者: Dana 时间: 2011-10-17 11:08
回复 2# FOR
多谢For的及时回复, 已经测试, 脚本不能删除最后一行的空行, 反而在最后一行空行的基础上, 增加了24个空行.
也就是, 原来的文本我提取了25行, 但是26行为空行, 需要只删除26行(最后一行)的空行, 脚本运行后, 整个文档变为了50行.
作者: hankerer 时间: 2011-10-17 12:17
回复 FOR
多谢For的及时回复, 已经测试, 脚本不能删除最后一行的空行, 反而在最后一行空行的基础上, ...
Dana 发表于 2011-10-17 11:08
- @echo off
- set N=25
- if not exist %1 exit
- if not defined N exit
-
- findstr /n .* %1> "%temp%\tmp"
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a Line = Var
- SetLocal EnableDelayedExpansion
- if !Line! lss !N! echo,!Var:*:=!
- if !Line! == !N! set /p =!Var:*:=!<nul
- EndLocal
- )
- ) >> %1
-
- del "%temp%\tmp"
- pause
复制代码
作者: FOR 时间: 2011-10-17 12:25
回复 3# Dana
大意了,- @echo off
- set N=25
- if not exist %1 exit
- if not defined N exit
-
- findstr /n .* %1> "%temp%\tmp"
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a Line = Var
- SetLocal EnableDelayedExpansion
- if !Line! leq !N! (
- if defined flag echo,
- set /p=!Var:*:=!
- )
- EndLocal
- set flag=a
- )
- )<nul>%1
- del "%temp%\tmp"
复制代码
作者: Dana 时间: 2011-10-17 12:53
回复 5# FOR
文档原本第一行是个空行, 执行后发现出现了两个空行....
作者: Dana 时间: 2011-10-17 13:00
回复 4# hankerer
感谢 hankerer 的回复, 测试后发现最后一行的空格是删除了, 但是脚本又将原25行的内容重新拷贝了一次, 文档变为了50行.
作者: FOR 时间: 2011-10-17 13:26
回复 6# Dana
我这里没问题,方便把你的测试样本发上来看看吗。
作者: hankerer 时间: 2011-10-17 13:29
回复 hankerer
感谢 hankerer 的回复, 测试后发现最后一行的空格是删除了, 但是脚本又将原25行的内 ...
Dana 发表于 2011-10-17 13:00
- @echo off
- set N=25
- if not exist %1 exit
- if not defined N exit
-
- findstr /n .* %1> "%temp%\tmp"
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a Line = Var
- SetLocal EnableDelayedExpansion
- if !Line! lss !N! echo,!Var:*:=!
- if !Line! == !N! set /p =!Var:*:=!<nul
- EndLocal
- )
- ) > %1
-
- del "%temp%\tmp"
- pause
复制代码
失误,把>多写了一个。
不过我只是提供一个不输出空行的思路
if !Line! == !N! set /p =!Var:*:=!<nul
作者: FOR 时间: 2011-10-17 13:48
本帖最后由 FOR 于 2011-10-17 13:50 编辑
回复 10# Dana
我测试仍是正常的
既然你说不行,就再给你个吧- @echo off
- if not exist %1 exit
- if not defined N exit
- set n=25
- findstr /n .* %1> "%temp%\tmp"
- set /a n-=1
- (
- for /f "usebackq delims=" %%a in ("%temp%\tmp") do (
- set Var=%%a
- set /a m+=1
- SetLocal EnableDelayedExpansion
- if !m! leq !N! echo,!Var:*:=!
- for %%j in (!m!) do EndLocal&set "#%%j=%%a"
- )
- )>%1
- call set /p=%%#%n%:*:=%%<nul>>%1
- del "%temp%\tmp"
复制代码
作者: Dana 时间: 2011-10-17 14:00
回复 9# hankerer
是的, 我的思路也是这样的, 判断是否为最后一行, 然后使用 set /p 但是代码怎么改都不对, 谢谢! 已经测试成功.
作者: powerbat 时间: 2011-10-17 14:07
- @set @n=0//& cscript.exe -e:jscript "%~f0"& exit/b
- f='test.txt';
- fso=new ActiveXObject('Scripting.FileSystemObject');
- s=fso.OpenTextFile(f).ReadAll();
- s=s.replace(/\r\n$/, '');
- fso.OpenTextFile(f+'~', 2, true).Write(s);
复制代码
作者: Dana 时间: 2011-10-17 14:37
终于搞清楚 if !Line! == !N! set /p =!Var:*:=!<nul
学习了, 问题已经解决. 多谢 powerbat , FOR , hankerer 帮忙. 谢谢!
作者: xudaweb 时间: 2011-10-17 23:13
本帖最后由 xudaweb 于 2011-10-17 23:25 编辑
学习了,这句好奇妙啊~复制代码
想不通啊,set /p后面怎么能直接跟"="号呀??
作者: Batcher 时间: 2011-10-17 23:40
回复 14# xudaweb
set命令的基础用法之一。等号左边可以有变量名,也可以没有,反正都是直接输出。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |