Board logo

标题: [文本处理] 批处理如何删除多个txt文本文件里面的最后一行内容? [打印本页]

作者: gannh    时间: 2014-1-21 11:55     标题: 批处理如何删除多个txt文本文件里面的最后一行内容?

本帖最后由 pcl_test 于 2016-7-23 21:58 编辑

现有N个文件夹,文件夹里面有N个文本文件,现需要把文本文件的最后一行内容去掉,请问批处理命令可以实现吗?
另,如果需要高效率处理,请问是否用sed命令会比其它命令高效么,谢谢
作者: terse    时间: 2014-1-21 13:03

本帖最后由 terse 于 2014-1-21 13:21 编辑

可以试试 findstr sed gawk ==命令
有个问题 最后行回车了怎么办
作者: gannh    时间: 2014-1-21 16:19

回复 2# terse


    请问这些命令怎么用?还请terse哥指教,谢谢啊!
作者: terse    时间: 2014-1-21 17:16

本帖最后由 terse 于 2014-1-21 17:19 编辑

要看尾行有无回车
  1. findstr $ *.txt
复制代码
下面两个是外部 需下载
sed 加 -i 直接写文件
  1. sed "$d" "*.txt"
复制代码
  1. GAWK "{print FILENAME\":\" t ;t=$0}" *.TXT
复制代码

作者: gannh    时间: 2014-1-21 21:19

回复 4# terse


    再次谢过terse的耐心解决,谢谢
作者: gannh    时间: 2014-1-22 14:15

再请教,请问如何显示批处理命令所执行时间?谢谢!
作者: DAIC    时间: 2014-1-22 16:24

回复 6# gannh


http://www.bathome.net/thread-4701-1-1.html
作者: gannh    时间: 2014-1-22 19:31

回复 7# DAIC


    看了一下,还是不太懂,请DAIC指教,谢谢
作者: DAIC    时间: 2014-1-23 08:36

回复 8# gannh


    哪里不懂?
作者: gannh    时间: 2014-1-23 11:48

回复 9# DAIC


    这个是脚本代码[保存为etime.bat放在当前路径下即可]:
:etime <begin_time> <end_time> <return>
rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版
setlocal&set be=%~1:%~2&set cc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%c&set dy=-8640000
for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%*("%3>>31")&exit/b


我将代码复制,并保存为etime.bat,并运行,得出的结果是

D:\>rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版  

D:\>setlocal & set be=:  & set cc=(%d-%a)*360000+(1%e-1%b)*6000+1%f-1%c  & set dy=-8640000

D:\>for /F "delims=: tokens=1-6" %a in (":") do endlocal & set/a =(%d-%a)*360000+(1%e-1%b)*6000+1%f-1%c,+=-8640000*(">>31")  & exit/b

这是什么问题呢,属于低级错误,还是我不理解?还请指教,谢谢!
作者: terse    时间: 2014-1-24 00:14

回复 10# gannh
  1. @echo off
  2. set t1=%time%
  3. ::程序运行
  4. for /L %%i in (1,1,10000) do ver>nul
  5. set t2=%time%
  6. call :etime %t1% %t2% t
  7. echo %t%
  8. pause&exit
  9. :etime
  10. rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版
  11. setlocal&set be=%~1:%~2&set cc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%c&set dy=-8640000
  12. for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%*("%3>>31")&exit/b
  13.    
复制代码

作者: gannh    时间: 2014-1-24 11:41

回复 11# terse


    再次感谢terse的耐心指点! 另有个疑问,在DOS下,什么命令可以快速移动多个文本文件(大概有十多万个),谢谢!
作者: CrLf    时间: 2014-1-25 18:09

本帖最后由 CrLf 于 2014-1-25 18:10 编辑

另类解:
  1. @sort /+9999 a.txt|more +1|sort /+9999
复制代码
效率不高,胜在简单,追求效率还是建议用sed
作者: CrLf    时间: 2014-1-25 20:06

回复 12# gannh
  1. move /y "原目录\*.txt" "新目录"
复制代码

作者: gannh    时间: 2014-1-28 12:36

谢谢crlf指教




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2