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

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

【求助】植入字符时遇到困难,望指点
俄有一大伽代码,其功能是:对多个文本的正数、倒数第二行插入字符,后来,我修改后,可以完成对多个文本的倒数第一行插入字符,
插入字符是“¥”,即插入到多个文本的最后一行的“前端”,
即:
    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.   ……
复制代码
示例文件
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

处理文本最后一行的方法很多,最不推荐的是 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
复制代码

TOP

本帖最后由 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. )
复制代码
这个只在最后一行开头插入¥号。
以这个为蓝本,可以实现任意一行或多行,在行首或行尾插入指定的字符串。
文件名或文本中有敏感英文字符也没关系。
1

评分人数

TOP

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

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

TOP

  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
复制代码
2

评分人数

    • 屡败屡战: 代码完美,有效解决了问题,谢谢老师技术 + 1
    • yhcfsr: 很完美,简洁效率,只一点,文件名有!时会出 ...技术 + 1

TOP

那我还问问,如果是插入字符到任意行的行尾,该如何修改代码??

TOP

回复 6# 屡败屡战


5楼21行改成这样试试
for /f "delims=:" %%k in ("%%j") do (echo;!s:*:=!!_%%k!)
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表