找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24715|回复: 5

[文本处理] 如何替换文本中特定字符串/内容中的部分字符

[复制链接]
发表于 2017-10-10 15:31:41 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-10-13 09:55 编辑

有1.nsi文件如下

  1. !define Version "7.5.4.79"
  2. !define Build "2017.09.19"
  3. !define Branch "R1.4"
  4. !define SvnVersion "20557"
  5. ;输出路径
  6. OutFile "H:\ShareFiles\package\I7\${Branch}\${Build} V${Version}\AVCON - Meeting_${Version}(auto)(Build_${SvnVersion}).exe"
  7. InstallDirRegKey HKLM "SOFTWARE\AVCONi7-Meeting" "Path"

  8. RequestExecutionLevel admin
复制代码
需要把!define Version "7.5.4.79"替换成!define Version "7.8.5.123"
需要把!define Build "2017.09.19"替换成!define Build "2017.10.10"文本中所有内容均要保留,包括中文注释
发表于 2017-10-10 20:28:06 | 显示全部楼层
不开延迟
(echo,!define Version "7.8.5.123"
....
)>2.txt
more +2 1.txt >2.txt
发表于 2017-10-10 22:54:35 | 显示全部楼层
  1. @echo off
  2. @cd /d %~dp0
  3. setlocal enabledelayedexpansion
  4. Set "Inputfile=文件路径"
  5. Set "Outputfile=输出路径"
  6. for %%i in (
  7.         "1"
  8.         "2"
  9. ) do (
  10.         Set /a K+=1
  11.         SEt Tuh!k!=%%~i
  12. )
  13. for %%i in (
  14.         "!define Version "7.8.5.123"
  15.         "!define Build "2017.10.10"
  16. ) do (
  17.         Set /a Tush+=1
  18.         Call :SetText !Tush!
  19. (
  20.         For %%i in (%Inputfile%) do (
  21.                 for /f "Delims=" %%a in (%%~fi) do (
  22.                         Set /a Line+=1
  23.                         if defined Text_!Line! {
  24.                                 echo;Text_!Line!
  25.                         ) else (
  26.                                 echo;%%i
  27.                         )
  28.                 )
  29.         )
  30. )>%Outputfile%
  31. :SetText
  32. Set "Text_!Tuh%~1!=%%i"
  33. Goto :Eof
复制代码
 楼主| 发表于 2017-10-11 11:16:57 | 显示全部楼层
没有修改到啊,一点变化没有呢。输出文件的文本都没生成

  1. @echo off
  2. @cd /d %~dp0
  3. setlocal enabledelayedexpansion
  4. Set Inputfile=H:\i7standard\I7_R1.4\package\00 BIN_Meeting_R1.4\I7-Meeting Setup - auto - R1.4.nsi
  5. Set Outputfile=H:\i7standard\I7_R1.4\package\00 BIN_Meeting_R1.4\2.nsi
  6. for %%i in (
  7.         "1"
  8.         "2"
  9. ) do (
  10.         Set /a K+=1
  11.         SEt Tuh!k!=%%~i
  12. )
  13. for %%i in (
  14.         "!define Version "7.8.5.123"
  15.         "!define Build "2017.10.10"
  16. ) do (
  17.         Set /a Tush+=1
  18.         Call :SetText !Tush!
  19. (
  20.         For %%i in (%Inputfile%) do (
  21.                 for /f "Delims=" %%a in (%%~fi) do (
  22.                         Set /a Line+=1
  23.                         if defined Text_!Line! {
  24.                                 echo;Text_!Line!
  25.                         ) else (
  26.                                 echo;%%i
  27.                         )
  28.                 )
  29.         )
  30. )>%Outputfile%
  31. :SetText
  32. Set "Text_!Tuh%~1!=%%i"
  33. Goto :Eof
复制代码
回复 3# bbaa
发表于 2017-10-12 11:04:41 | 显示全部楼层
本帖最后由 见与不见 于 2017-10-12 11:16 编辑

文本是非ansi编码的,先手动修改编码,在用批处理修改

批处理替换实例
  1. @echo off
  2. cd.>_tmp.txt
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1* delims=:" %%i in ('findstr /n .* jqq.txt') do (
  5.   set xiao=%%j
  6.   if not "!xiao!"=="" set "xiao=!xiao:注册表=!"
  7.   >>"_tmp.txt" echo.!xiao!
  8. )
  9. start notepad.exe _tmp.txt
复制代码
发表于 2017-10-12 11:22:36 | 显示全部楼层
文本是非ansi编码的,先手动修改编码,在用批处理修改

批处理替换实例
见与不见 发表于 2017-10-12 11:04



    这个问题不是在于怎么去全部替换,你本身NSIS都脚本是UTF8无BOM编码的,需要转换编码,使用批处理自动替换字符,你还得把完全匹配和替换这样都话 ,有这功夫不如手动修改,另外我建议的是,正则模糊匹配字符串进行替换,以后再次修改依然可以用,不需要再去管修改都内容是什么,一劳永逸。

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 14:36 , Processed in 0.019809 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表