Board logo

标题: [文本处理] 如何替换文本中特定字符串/内容中的部分字符 [打印本页]

作者: yym黄诗瑶    时间: 2017-10-10 15:31     标题: 如何替换文本中特定字符串/内容中的部分字符

本帖最后由 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"文本中所有内容均要保留,包括中文注释
作者: /zhqsystem/zhq    时间: 2017-10-10 20:28

不开延迟
(echo,!define Version "7.8.5.123"
....
)>2.txt
more +2 1.txt >2.txt
作者: bbaa    时间: 2017-10-10 22:54

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

作者: yym黄诗瑶    时间: 2017-10-11 11:16

没有修改到啊,一点变化没有呢。输出文件的文本都没生成
  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

本帖最后由 见与不见 于 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

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

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



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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2