标题: [文本处理] 批处理在一行字符串中每隔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
搞了个模拟的(如果楼主仔细想一下,就可以根据这个代码来解决自己问题):- @echo off&setlocal enabledelayedexpansion
- (for %%a in (a b c d e f g h i j) do (
- for /l %%b in (1,1,1000) do set /p=%%a<nul
- ))>temp.xls&echo.>>temp.xls
- (for /l %%a in (1,1,25) do (
- set /a "n=400*(%%a-1)+1"
- echo =mid^(a1,!n!,400^)^&^"\^"
- ))>>temp.xls
- start temp.xls
复制代码
下面是分隔后合到一行的(复制temp.xls第二行粘贴到txt文本中看),真难搞- @echo off&setlocal enabledelayedexpansion
- (for %%a in (a b c d e f g h i j) do (
- for /l %%b in (1,1,1000) do set /p=%%a<nul
- ))>temp.xls&echo.>>temp.xls
- for /l %%a in (1,1,25) do (
- set /a "n=400*(%%a-1)+1
- set str=!str!^&mid^(a1,!n!,400^)^&^"\^"
- )
- echo =!str:~1!>>temp.xls
- start temp.xls
复制代码
[ 本帖最后由 batman 于 2010-11-27 11:59 编辑 ]
作者: znrn 时间: 2010-12-2 12:03
嗯 谢谢老大
您说超过8189这个字符数就不好处理,那么低于这个数字就可以的吧?
比如现在我有一篇3000字的文章,我需要在每20个字后面加一个“/”,那么需要怎么写这个批处理呢?
麻烦老大了!
作者: FOR 时间: 2010-12-2 12:14
- @echo off
- set /p var=<"a.txt"
- :s
- if not defined var goto end
- set/p=%var:~0,20%/<nul
- set "var=%var:~20%"
- goto s
- :end
- pause
复制代码
作者: hanyeguxing 时间: 2010-12-2 12:24
要求,文本只有一行,即开头要顶行,文件大小小于8189字节:- @echo off&setlocal enabledelayedexpansion
- for %%a in ("1.txt") do if %%~za gtr 8192 echo 超过&pause&exit
- set/p p=<"1.txt"
- (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
已经加上去了- @echo off&setlocal enabledelayedexpansion
- for %%a in ("1.txt") do if %%~za gtr 8192 echo 超过&pause&exit
- set/p p=<"1.txt"
- (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://www.bathome.net/) |
Powered by Discuz! 7.2 |