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

[文本处理] 为什么这段代码处理稍大一点的文本就无法执行了

本帖最后由 lbailian 于 2012-5-5 12:00 编辑

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir/b/a-d *.txt') do (
set s=
(for /f "tokens=*" %%j in ('type "%%i"') do (
if "!s!" neq "" echo !s!
set s=%%j))>temp.txt
echo BBBBBBB>>temp.txt
move /y temp.txt "%%i")

以上就是代码,3M+的文本都无法处理了,要怎么修改代码,让它可以处理稍大一点的文本,最好能处理将近10M的文本~
要处理的文本有很多,代码的作用是替换掉文本最后一行的内容~

'type "%%i"'改成"%%~i"

TOP

回复 1# lbailian

请问具体想达到什么样的处理目的.
简单测试了一下, 对有换行结尾的文件原样的没变,
而没有换行结尾的文件就被截去最后一行, 而替换成 BBBBBBB, 并以换行结尾
不知楼主的意图是否如此?

TOP

回复 2# yangfengoo

我只要修改最后一行的文本~

TOP

回复 3# neorobin

就是把文本的最后一行内容替换成BBBBBBB

TOP

回复 5# lbailian
  1. sed -i "$s/.*/BBBBBBB/" a.txt
复制代码

TOP

这段代码运行起来是没什么问题的,利用空值和条件判断,让文本输出延后了一行

至于不能读取三兆以上的文本,可以试试把type取消掉,因为它本来就没有存在的必要
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('dir/b *.txt') do (
  4. set s=
  5. for /f "tokens=*" %%j in (%%i) do (
  6. if "!s!" neq "" echo !s!>>temp.txt
  7. set s=%%j
  8. )
  9. echo BBBBBBB>>temp.txt
  10. move /y temp.txt "%%i")
  11. set s=
复制代码

TOP

返回列表