Board logo

标题: [文本处理] 批处理在一行字符串中每隔400个字符插入一个指定字符 [打印本页]

作者: znrn    时间: 2010-11-26 20:46     标题: 批处理在一行字符串中每隔400个字符插入一个指定字符

本帖最后由 pcl_test 于 2016-11-25 08:56 编辑

如题,如果我有一个1万字,或N字的TXT文本文件,我想在每400个字后面加上一个字符“/”,那么应该怎么做呢?谢谢!
万分感激!
作者: batman    时间: 2010-11-26 21:01

这个txt文件只有一行,还是按一定规律分了行?
作者: znrn    时间: 2010-11-27 00:42

只有一行,嘿嘿

比如一万个字,也只有一行,我想让他每400字后面加一个 /
作者: batman    时间: 2010-11-27 10:14

一万字一行,已经超出批处理变量字符数最大8189的极限了,估计这样的文本用批是没辙了。。。
作者: batman    时间: 2010-11-27 11:29

搞了个模拟的(如果楼主仔细想一下,就可以根据这个代码来解决自己问题):
  1. @echo off&setlocal enabledelayedexpansion
  2. (for %%a in (a b c d e f g h i j) do (
  3.     for /l %%b in (1,1,1000) do set /p=%%a<nul
  4. ))>temp.xls&echo.>>temp.xls
  5. (for /l %%a in (1,1,25) do (
  6.     set /a "n=400*(%%a-1)+1"
  7.     echo =mid^(a1,!n!,400^)^&^"\^"
  8. ))>>temp.xls
  9. start temp.xls
复制代码
下面是分隔后合到一行的(复制temp.xls第二行粘贴到txt文本中看),真难搞
  1. @echo off&setlocal enabledelayedexpansion
  2. (for %%a in (a b c d e f g h i j) do (
  3.     for /l %%b in (1,1,1000) do set /p=%%a<nul
  4. ))>temp.xls&echo.>>temp.xls
  5. for /l %%a in (1,1,25) do (
  6.     set /a "n=400*(%%a-1)+1
  7.     set str=!str!^&mid^(a1,!n!,400^)^&^"\^"
  8. )
  9. echo =!str:~1!>>temp.xls
  10. start temp.xls
复制代码

[ 本帖最后由 batman 于 2010-11-27 11:59 编辑 ]
作者: znrn    时间: 2010-12-2 12:03

嗯 谢谢老大

您说超过8189这个字符数就不好处理,那么低于这个数字就可以的吧?

比如现在我有一篇3000字的文章,我需要在每20个字后面加一个“/”,那么需要怎么写这个批处理呢?

麻烦老大了!
作者: FOR    时间: 2010-12-2 12:14

  1. @echo off
  2. set /p var=<"a.txt"
  3. :s
  4. if not defined var goto end
  5. set/p=%var:~0,20%/<nul
  6. set "var=%var:~20%"
  7. goto s
  8. :end
  9. pause
复制代码

作者: hanyeguxing    时间: 2010-12-2 12:24

要求,文本只有一行,即开头要顶行,文件大小小于8189字节:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in ("1.txt") do if %%~za gtr 8192 echo 超过&pause&exit
  3. set/p p=<"1.txt"
  4. (for /l %%a in (0,20,8172) do if not "!p:~%%a,20!"=="" set/p"=!p:~%%a,20!/"<nul)>1_.txt
复制代码
如果不想检测文件大小,则第一个for 那行可以不要

[ 本帖最后由 hanyeguxing 于 2010-12-2 14:12 编辑 ]
作者: znrn    时间: 2010-12-2 14:04

原帖由 FOR 于 2010-12-2 12:14 发表
@echo off
set /p var=


谢谢喔,可是怎么样把这些结果输出到XX.TXT呢?
作者: znrn    时间: 2010-12-2 14:05

原帖由 hanyeguxing 于 2010-12-2 12:24 发表
要求,文本只有一行,即开头要顶行,文件大小小于8189字节:@echo off
for %%a in ("1.txt") do if %%~za gtr 8192 echo 超过&pause&exit
set/p p=


呃。。老大,用这个代码出来后是这样的结果:

!p:~0,20!/!p:~20,20!/!p:~40,20!/!p:~60,20!/!p:~80,20!/!p:~100,20!/!p:~120,20!/!p:~140,20!/!p:~160,20!/!p:~180,20!/!p:~200,20!/!p:~220,20!/!p:~240,20!/!p:~260,20!/!p:~280,20!/!p:~300,20!/!p:~320,20!/!p:~340,20!/!p:~360,20!/!p:~380,20!/!p:~400,20!/!p:~420,20!/!p:~440,20!/!p:~460,20!/
作者: hanyeguxing    时间: 2010-12-2 14:12     标题: 回复 10楼 的帖子

少打了setlocal enabledelayedexpansion
已经加上去了
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in ("1.txt") do if %%~za gtr 8192 echo 超过&pause&exit
  3. set/p p=<"1.txt"
  4. (for /l %%a in (0,20,8172) do if not "!p:~%%a,20!"=="" set/p"=!p:~%%a,20!/"<nul)>1_.txt
复制代码

作者: znrn    时间: 2010-12-2 15:58

已经搞定,感谢老大!

太谢谢您了!




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