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

[文本处理] 如何用批处理或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 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
复制代码

TOP

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

非常感谢大佬,但还是不成功,不吝赐教,感谢

TOP

本帖最后由 小白龙 于 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. }
复制代码

TOP

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

TOP

回复 3# fly9902
修改了 试一下吧

TOP

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

TOP

回复 6# terse


    感谢大佬的热心帮助,修改下5楼的成功

TOP

回复 4# 小白龙


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

TOP

返回列表