Board logo

标题: [文本处理] 【已解决】如何在指定行行首/开头插入字符 [打印本页]

作者: 屡败屡战    时间: 2018-3-26 16:54     标题: 【已解决】如何在指定行行首/开头插入字符

【求助】植入字符时遇到困难,望指点
俄有一大伽代码,其功能是:对多个文本的正数、倒数第二行插入字符,后来,我修改后,可以完成对多个文本的倒数第一行插入字符,
插入字符是“¥”,即插入到多个文本的最后一行的“前端”,
即:
    xxxxxxxx
     xxxxxxx
   ¥xxxxxxxx

       但是,其成功率不昰100%,请看示范文件,有些个别文档无法达到要求。致使字符“¥”会插入到这些文本最后一行的“中间”位置。
     后来,研究了几天,发些有些文档內容是含有英文符号“()”的。
    请教一下,批处理代码好像对英文符号特别敏感,特别是“()”,是不是因为编写代码时,有很多“()”符号参与,而造成于扰。
    我前后修改了个把月,效果不好,主要是看不憧批处理代码,搞得很狼狈
    望解释下,有什么方法可以解决下此种情况.
http://www.bathome.net/redirect. ... 0609&ptid=24144
批处理代码:
  1. @echo off&setlocal enabledelayedexpansion  
  2. set "str1=国庆节"&set "str2=¥"  
  3. for %%a in (*.txt) do (  
  4.   set /a q=1,l=0,n=0  
  5.   for /f "tokens=2 delims=:" %%b in ('find /v /c "" "%%a"') do set /a h=%%b
  6.   ……
复制代码
示例文件
作者: WHY    时间: 2018-3-26 17:48

处理文本最后一行的方法很多,最不推荐的是 echo %%a | findstr 这种,不仅效率低下,遇到特殊字符(如:|、&、小括号)就挂掉。

以下为示例:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.txt) do (
  4.     set "s="
  5.     for /f "delims=" %%j in ('type "%%i"') do (
  6.         if defined s echo;!s!
  7.         set "s=%%j"
  8.     )
  9.     if defined s echo;@@@@!s!
  10. ) > "%%i.Log"
  11. pause
复制代码

作者: yhcfsr    时间: 2018-3-26 18:40

本帖最后由 yhcfsr 于 2018-3-26 18:50 编辑
  1. @ECHO Off
  2. set "SrcDir=d:\test"
  3. cd /d "%SrcDir%"
  4. for /f  "delims=" %%a in ('dir /a-d /s /b *.txt') do (
  5. for /f  "delims=" %%i in ('type "%%a"') do set/a n+=1
  6. (for /f  "delims=" %%b in ('findstr /n ".*" "%%a"') do (
  7.         set "var=%%b"
  8.         set/a m+=1
  9. setlocal enabledelayedexpansion
  10.         set var=!var:*:=!
  11. if !m!==!n! set "var=¥!var!"
  12. echo;!var!
  13. endlocal
  14. ))>"%%a.log"
  15. )
复制代码
这个只在最后一行开头插入¥号。
以这个为蓝本,可以实现任意一行或多行,在行首或行尾插入指定的字符串。
文件名或文本中有敏感英文字符也没关系。
作者: 屡败屡战    时间: 2018-3-26 21:13

本帖最后由 屡败屡战 于 2018-3-26 21:21 编辑

谢谢2楼、3楼老师的代码,代码解决了我的问题。十分感谢!!
还有,我还想再问问,
若想在“倒数”的仼意行的(行首或行尾)插入字符“¥”,倒数的行由自己定。
我曾尝试在“在顺数的特定行插入字符”这个代码的基础上,修改了很多次,就是把正数改成负数,由于不咋憧,改来改去,也没搞出啥来。
自我感觉,顺数行、倒数行代码区别是很大的
望指点下,最好能把关键的部位(例如修改行数、行首、行尾)等处给注解下。让我能看懂。
作者: WHY    时间: 2018-3-26 22:21

  1. @echo off
  2. rem 源目录
  3. set "srcDir=E:\Test"
  4. echo;输入数字,逗号隔开,如输入:1,5,-1,-3 表示顺数第1行、第5行,倒数第1行、第3行。
  5. set /p s=
  6. for %%i in ("%srcDir%\*.txt") do (
  7.     setlocal enabledelayedexpansion
  8.     for /f %%j in ('find /v /c "" ^< "%%i"') do set n=%%j
  9.     for %%j in (!s!) do (
  10.         set /a "x = (n+1) * (%%j>>31&1) + %%j"
  11.         set "_!x!=@@@@"
  12.     )
  13.     for /f "delims=" %%j in ('findstr /n .* "%%i"') do (
  14.         set "s=%%j"
  15.         for /f "delims=:" %%k in ("%%j") do (echo;!_%%k!!s:*:=!)
  16.     )
  17.     endlocal
  18. ) > "%%i.Log"
  19. 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