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

[文本处理] 如何用批处理或Powershell替换文本内容?[已解决]

[复制链接]
发表于 2022-11-12 22:58:55 | 显示全部楼层 |阅读模式
本帖最后由 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\"
其他省略.....
发表于 2022-11-13 08:08:27 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2022-11-13 17:32:27 | 显示全部楼层
纯P 比POWERSHEL复杂 试下显示的是否符合
terse 发表于 2022-11-13 08:08

非常感谢大佬,但还是不成功,不吝赐教,感谢
发表于 2022-11-13 17:57:03 | 显示全部楼层
本帖最后由 小白龙 于 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. }
复制代码
发表于 2022-11-13 18:36:37 | 显示全部楼层

  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. )
复制代码
发表于 2022-11-13 21:05:08 | 显示全部楼层
回复 3# fly9902
修改了 试一下吧
 楼主| 发表于 2022-11-13 22:44:35 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2022-11-13 22:45:26 | 显示全部楼层
回复 6# terse


    感谢大佬的热心帮助,修改下5楼的成功
 楼主| 发表于 2022-11-13 22:46:43 | 显示全部楼层
回复 4# 小白龙


    感谢大佬的关注帮忙,按5楼方法基本解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 12:03 , Processed in 0.019283 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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