Board logo

标题: [文本处理] 如何用批处理或Powershell替换文本内容?[已解决] [打印本页]

作者: fly9902    时间: 2022-11-12 22:58     标题: 如何用批处理或Powershell替换文本内容?[已解决]

本帖最后由 fly9902 于 2022-11-13 22:45 编辑

现有a.txt,内容为:
C:\Users\Fast\AppData\Roaming=$APPDATA
C:\Windows\system32=$SYSDIR
其他省略.....


b.txt,内容为:
WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "RoamableRootFolder" "C:\Users\Fast\AppData\Roaming\"
WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "SystemFolder" "C:\Windows\system32\"
其他省略.....


最终用a.txt里的内容替换b.txt里内容为:
WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "RoamableRootFolder" "$APPDATA\"
WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "SystemFolder" "$SYSDIR\"
其他省略.....
作者: terse    时间: 2022-11-13 08:08

本帖最后由 terse 于 2022-11-13 21:05 编辑

纯P 比POWERSHEL复杂 试下显示的是否符合
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (b.txt) do (
  4.       set /p str=
  5.       set n=-1
  6.       set "s="
  7.       set "s1="
  8.       for %%A in (%%a) do (
  9.                set "s=!s! !s1!"
  10.                set "s1=%%A"
  11.       )
  12.       for /f "tokens=1* delims==" %%A in ("!str!") do echo !s:~2! %%B& echo %%B
  13. ))<a.txt
  14. pause
复制代码

作者: fly9902    时间: 2022-11-13 17:32

纯P 比POWERSHEL复杂 试下显示的是否符合
terse 发表于 2022-11-13 08:08

非常感谢大佬,但还是不成功,不吝赐教,感谢
作者: 小白龙    时间: 2022-11-13 17:57

本帖最后由 小白龙 于 2022-11-13 18:07 编辑

回复 1# fly9902
  1. #@&cls&powershell "gc '%~f0'|out-string|iex"&pause&exit
  2. $a = @'
  3. C:\Users\Fast\AppData\Roaming=$APPDATA
  4. C:\Windows\system32=$SYSDIR
  5. '@ | ConvertFrom-StringData
  6. $b = @'
  7. WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "RoamableRootFolder" "C:\Users\Fast\AppData\Roaming\"
  8. WriteRegStr HKCU "Software\3DMAX\R23.2\6101:804" "SystemFolder" "C:\Windows\system32\"
  9. '@ -split '\r?\n'
  10. foreach ($b_ in $b)
  11. {
  12. foreach ($ak in $a.Keys)
  13. {
  14. $ake = [regex]::Escape($ak)
  15. if ($b_ -match $ake)
  16. {
  17. $av = ($a.GetEnumerator() | ? name -EQ $ak).Value
  18. $b_ -replace $ake, $av
  19. }
  20. }
  21. }
复制代码

作者: hfxiang    时间: 2022-11-13 18:36

  1. @echo off
  2. rem 保存为ANSI格式
  3. setlocal enableDelayedExpansion
  4. for /f "tokens=* delims==" %%a in (b.txt) do (
  5. set "str=%%a"
  6. for /f "tokens=1* delims==" %%b in (a.txt) do (
  7. call set str=%%str:%%b=%%c%%
  8. )
  9. echo;!str!
  10. )
复制代码

作者: terse    时间: 2022-11-13 21:05

回复 3# fly9902
修改了 试一下吧
作者: fly9902    时间: 2022-11-13 22:44

回复 5# hfxiang


   
感谢 ,在后面加>>c.txt成功
  1. @echo off
  2. rem 保存为ANSI格式
  3. setlocal enableDelayedExpansion
  4. for /f "tokens=* delims==" %%a in (b.txt) do (
  5. set "str=%%a"
  6. for /f "tokens=1* delims==" %%b in (a.txt) do (
  7. call set str=%%str:%%b=%%c%%
  8. )
  9. echo;!str! >>c.txt
  10. )
  11. pause
复制代码

作者: fly9902    时间: 2022-11-13 22:45

回复 6# terse


    感谢大佬的热心帮助,修改下5楼的成功
作者: fly9902    时间: 2022-11-13 22:46

回复 4# 小白龙


    感谢大佬的关注帮忙,按5楼方法基本解决




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