标题: [文本处理] 【已解决】如何在指定行行首/开头插入字符 [打印本页]
作者: 屡败屡战 时间: 2018-3-26 16:54 标题: 【已解决】如何在指定行行首/开头插入字符
【求助】植入字符时遇到困难,望指点
俄有一大伽代码,其功能是:对多个文本的正数、倒数第二行插入字符,后来,我修改后,可以完成对多个文本的倒数第一行插入字符,
插入字符是“¥”,即插入到多个文本的最后一行的“前端”,
即:
xxxxxxxx
xxxxxxx
¥xxxxxxxx
但是,其成功率不昰100%,请看示范文件,有些个别文档无法达到要求。致使字符“¥”会插入到这些文本最后一行的“中间”位置。
后来,研究了几天,发些有些文档內容是含有英文符号“()”的。
请教一下,批处理代码好像对英文符号特别敏感,特别是“()”,是不是因为编写代码时,有很多“()”符号参与,而造成于扰。
我前后修改了个把月,效果不好,主要是看不憧批处理代码,搞得很狼狈
望解释下,有什么方法可以解决下此种情况.
http://www.bathome.net/redirect. ... 0609&ptid=24144
批处理代码:- @echo off&setlocal enabledelayedexpansion
- set "str1=国庆节"&set "str2=¥"
- for %%a in (*.txt) do (
- set /a q=1,l=0,n=0
- for /f "tokens=2 delims=:" %%b in ('find /v /c "" "%%a"') do set /a h=%%b
- ……
复制代码
示例文件
作者: WHY 时间: 2018-3-26 17:48
处理文本最后一行的方法很多,最不推荐的是 echo %%a | findstr 这种,不仅效率低下,遇到特殊字符(如:|、&、小括号)就挂掉。
以下为示例:- @echo off
- setlocal enabledelayedexpansion
- for %%i in (*.txt) do (
- set "s="
- for /f "delims=" %%j in ('type "%%i"') do (
- if defined s echo;!s!
- set "s=%%j"
- )
- if defined s echo;@@@@!s!
- ) > "%%i.Log"
- pause
复制代码
作者: yhcfsr 时间: 2018-3-26 18:40
本帖最后由 yhcfsr 于 2018-3-26 18:50 编辑
- @ECHO Off
- set "SrcDir=d:\test"
-
- cd /d "%SrcDir%"
- for /f "delims=" %%a in ('dir /a-d /s /b *.txt') do (
- for /f "delims=" %%i in ('type "%%a"') do set/a n+=1
- (for /f "delims=" %%b in ('findstr /n ".*" "%%a"') do (
- set "var=%%b"
- set/a m+=1
- setlocal enabledelayedexpansion
- set var=!var:*:=!
- if !m!==!n! set "var=¥!var!"
- echo;!var!
- endlocal
- ))>"%%a.log"
- )
复制代码
这个只在最后一行开头插入¥号。
以这个为蓝本,可以实现任意一行或多行,在行首或行尾插入指定的字符串。
文件名或文本中有敏感英文字符也没关系。
作者: 屡败屡战 时间: 2018-3-26 21:13
本帖最后由 屡败屡战 于 2018-3-26 21:21 编辑
谢谢2楼、3楼老师的代码,代码解决了我的问题。十分感谢!!
还有,我还想再问问,
若想在“倒数”的仼意行的(行首或行尾)插入字符“¥”,倒数的行由自己定。
我曾尝试在“在顺数的特定行插入字符”这个代码的基础上,修改了很多次,就是把正数改成负数,由于不咋憧,改来改去,也没搞出啥来。
自我感觉,顺数行、倒数行代码区别是很大的
望指点下,最好能把关键的部位(例如修改行数、行首、行尾)等处给注解下。让我能看懂。
作者: WHY 时间: 2018-3-26 22:21
- @echo off
-
- rem 源目录
- set "srcDir=E:\Test"
-
- echo;输入数字,逗号隔开,如输入:1,5,-1,-3 表示顺数第1行、第5行,倒数第1行、第3行。
- set /p s=
-
- for %%i in ("%srcDir%\*.txt") do (
-
- setlocal enabledelayedexpansion
- for /f %%j in ('find /v /c "" ^< "%%i"') do set n=%%j
-
- for %%j in (!s!) do (
- set /a "x = (n+1) * (%%j>>31&1) + %%j"
- set "_!x!=@@@@"
- )
-
- for /f "delims=" %%j in ('findstr /n .* "%%i"') do (
- set "s=%%j"
- for /f "delims=:" %%k in ("%%j") do (echo;!_%%k!!s:*:=!)
- )
- endlocal
-
- ) > "%%i.Log"
- pause
复制代码
作者: 屡败屡战 时间: 2018-3-26 23:02
那我还问问,如果是插入字符到任意行的行尾,该如何修改代码??
作者: Batcher 时间: 2018-3-27 09:29
回复 6# 屡败屡战
5楼21行改成这样试试
for /f "delims=:" %%k in ("%%j") do (echo;!s:*:=!!_%%k!)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |