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

[文本处理] 批处理如何替换文本中指定行的内容??

[复制链接]
发表于 2019-2-11 23:13:01 | 显示全部楼层 |阅读模式
如题,我有一段注册表文件,需要用批处理导入到注表册中,但是该注册表在32位和64位系统下的路径不同,所以用批处理导入前必须处理一下:
32位的路径是[HKEY_LOCAL_MACHINE\SOFTWARE\Le]    64位的路径是:[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le],
前面做个版本判断,根据版本把相对应的路径值赋予给变量X,再把变量X替换注册表文件中的路径即可。可是在替换的时候出现问题:
注册表文件内容是这样的:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le]
"x"=ss="
"li"="Rf"
"jur"="6WHrtyr"
"llxj"="pW"

需要把注册表文件的第三行替换成相应的路径,在网上找的代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (xyzc.txt) do (
  3.    set /a num+=1
  4.    if !num!==3 (echo b=4567) else echo %%a
  5. )>>temp.txt
  6. move temp.txt xyzc.txt
  7. pause
复制代码
该代码在一般情况下确实可以进行指定行的内容替换工作,但是用在我上面的注册表文件中却行不通,因为运行后,批处理会把空行删除,然后再进行替换,这样一来,原本的第二行就没有了,第三行变成了第二行,第四行变成了第三行,替换的效果如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le]
[HKEY_LOCAL_MACHINE\SOFTWARE\Le]
"li"="Rf"
"jur"="6WHrtyr"
"llxj"="pW"

根本达不到我想要的结果,有没有大神教教我这个批处理要怎么写才能不管前面有没有空行都能正确的替换我指定的行的内容??
发表于 2019-2-12 00:29:14 | 显示全部楼层
本帖最后由 yhcfsr 于 2019-2-12 16:01 编辑
  1. @echo off

  2. echo;%PROCESSOR_ARCHITECTURE%|find "x86"&&(
  3. set "rpath=[HKEY_LOCAL_MACHINE\SOFTWARE\Le]")||(
  4. set "rpath=[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le]")

  5. >"tmp.file" (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "注册表文件.reg"') do (
  6.         if %%a==3 (echo;%rpath%) else (echo;%%b)
  7. ))
  8. move /y "tmp.file" "注册表文件.reg"
复制代码
发表于 2019-2-12 05:49:46 | 显示全部楼层
本帖最后由 aries215 于 2019-2-12 06:01 编辑

回复 2# yhcfsr
x84?多少钱买的?
http://www.bathome.net/thread-30883-1-1.html
 楼主| 发表于 2019-2-12 11:45:32 | 显示全部楼层
yhcfsr 发表于 2019-2-12 00:29



    亲测无效,是乱码。。。。
发表于 2019-2-12 13:47:18 | 显示全部楼层
本帖最后由 WHY 于 2019-2-12 13:50 编辑

没必要判断系统位数,也没必要修改reg文本内容
  1. reg import 1.reg /reg:32
复制代码
64位系统的话,1.reg 中的注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Le 会自动重定向写入到注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le
reg import 可能需要管理员权限

评分

参与人数 1技术 +1 收起 理由
z18137 + 1 谢谢,完美解决!

查看全部评分

发表于 2019-2-12 13:55:07 | 显示全部楼层
回复 4# z18137


你的.reg文件是Unicode编码吧?2楼第7行改成这样试试可以吗:
>"tmp.file" (for /f "tokens=1* delims=:" %%a in ('type "注册表文件.reg" ^| findstr /n .*') do (
发表于 2019-2-12 16:53:18 | 显示全部楼层
先来个PS 和 P 的混合体

  1. $str = '[HKEY_LOCAL_MACHINE\SOFTWARE\Le]';
  2. if ($env:ProgramW6432){$str='[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Le]'};
  3. ni "$env:temp\xxx.reg" -type file -force;
  4. gc "$pwd\reg.txt" | ?{ if ($_ -match '^\[HEKY.+Le\]$' ) {
  5.         $STR|ac "$env:temp\xxx.reg" } else { $_|ac "$env:temp\xxx.reg" }
  6. };
  7. Start-Process "$pshome\powershell.exe" -argumentlist "-NoProfile -command `
  8. cmd /c regedit /s '$env:temp\xxx.reg' `
  9. del '$env:temp\xxx.reg' -Force" -verb runas;
  10. pause;
复制代码
纯 PS

  1. $str = 'SOFTWARE\Le';
  2. if ($env:ProgramW6432){$str = 'SOFTWARE\Wow6432Node\Le'};
  3. Start-Process "$pshome\powershell.exe" -argumentlist "-NoProfile -command `
  4. md hklm:$str; cd hklm:$str `
  5. New-ItemProperty . -name 'x' -Value 'ss' `
  6. New-ItemProperty . -name 'li' -Value 'RF' `
  7. New-ItemProperty . -name 'jur' -Value '6WHrtyr' `
  8. New-ItemProperty . -name 'llxj' -Value 'pW'" -Verb runas;
  9. pause;
复制代码
 楼主| 发表于 2019-2-13 11:00:24 | 显示全部楼层
回复 5# WHY


    又学习了一招,宛美解决,只是如果方便 的话能不能给我解释一下这个命令么?还有后面的参数的意义,有点不太懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 02:00 , Processed in 0.022077 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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