Board logo

标题: [文件操作] [已解决]批处理如何查找并替换文本里特定字符串中的部分内容 [打印本页]

作者: ygqiang    时间: 2017-3-1 20:21     标题: [已解决]批处理如何查找并替换文本里特定字符串中的部分内容

本帖最后由 ygqiang 于 2017-3-2 09:04 编辑

bat如何搜索并替换ini文件里的userx关键字。不能用第三方exe软件。
其中的x是数字,不确定位数、也不确定是哪个数字。

搜索userx关键字,然后替换成user%y%,y变量是手动输入的数字。

比如ini文件里面,这里的userx就是指user231


config.ini文件内容如下:
  1. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v EnableShade /t REG_SZ /d false /f
  2. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Shell /t REG_SZ /d wscript c:\\client\\start.vbs /f
  3. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v ServerURL /t REG_SZ /d vdi.aaa.bbb.cn /f
  4. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client\Security" /v CertCheckMode /t REG_SZ /d 0 /f
  5. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v NonInteractive /t REG_SZ /d false /f
  6. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v DomainName /t REG_SZ /d CLOUD /f
  7. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v UserName /t REG_SZ /d user231 /f
  8. ccc
  9. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v Password /t REG_SZ /d ccc@123 /f
  10. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v DesktopLayout /t REG_SZ /d FullScreen /f
  11. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v connectUSBOnStartup /t REG_SZ /d true /f
  12. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware VDM\Client" /v connectUSBOnInsert /t REG_SZ /d true /f
  13. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v connectUSBOnInsert /t REG_SZ /d true /f
  14. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v disablecad /t REG_DWORD  /d 1 /f
  15. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableTaskMgr /t REG_DWORD  /d 1 /f
  16. reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v legalnoticecaption /f
  17. reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v legalnoticetext /f
  18. shutdown -r -f -t 1
复制代码

作者: GNU    时间: 2017-3-1 20:33

替换成什么内容?
作者: ygqiang    时间: 2017-3-1 20:34

回复 2# GNU


    搜索userx关键字,然后替换成user%y%,y变量是手动输入的数字。
作者: ygqiang    时间: 2017-3-1 20:37

回复 2# GNU

http://www.bathome.net/thread-43341-1-1.html

感觉跟这个帖子的问题。应该有通用的解决方法吧?
作者: GNU    时间: 2017-3-1 20:44

回复 4# ygqiang


是否通用不知道,看你是否有能力看懂代码、修改代码吧。
http://bbs.bathome.net/thread-43341-1-1.html#pid196603
作者: taofan712    时间: 2017-3-1 21:44

本帖最后由 taofan712 于 2017-3-1 23:25 编辑
  1. @echo off
  2. set /p usery=手动输入user关键字(如user712)
  3. findstr /n .* a.ini>temp.ini
  4. for /f "tokens=1* delims=:" %%a in ('findstr /i "username" temp.ini^|findstr user[0-9]') do (
  5. set /a tn=%%a
  6. for %%i in (%%b) do (
  7. call set userx=%%str%%
  8. set str=%%i
  9. )
  10. )
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1* delims=:" %%i in (temp.ini) do (
  13. set /a ln=%%i
  14. set line=%%j
  15. if !ln! equ !tn! (
  16. echo;!line:%userx%=%usery%!
  17. ) else (
  18. echo;!line!
  19. )
  20. )>>newa.ini
  21. del /f /q temp.ini
复制代码
新人练手,请求加分鼓励
作者: ygqiang    时间: 2017-3-1 21:55

回复 6# taofan712


  多谢。初步测试成功了。
作者: taofan712    时间: 2017-3-1 22:05

回复 7# ygqiang
不跳过空行,论坛已经有很多帖子在用findstr的方法。
这个题我个人觉得难度在于如何获取user231。
作者: ygqiang    时间: 2017-3-1 23:13

回复 8# taofan712


    测试后,发现新的newa.ini文件,比a.ini文件,多了几个空行。

感觉del /f /q temp.ini应该放在bat文件最后面。
作者: taofan712    时间: 2017-3-1 23:24

回复 9# ygqiang


   是我 疏忽了,我是分成的两个bat在写,边写边测试,最后合起来的时候没检查仔细。del确实应该放最后。。。
出现双倍空行,是因为第二段代码里面用的是temp.ini,里面不必判断空行,所以应该把if = “” 去掉。
已经在6楼改正。
作者: 回家路上    时间: 2017-3-2 08:51

  1. @if(0)==(0) echo off & set/p "rep=输入替换为:"
  2. cscript -nologo -e:jscript "%~f0" "%rep%"<"config.ini">"new.ini"&pause&exit/b&@end
  3. WSH.Echo(WScript.StdIn.ReadALL().replace(/user[0-9]+/g, WScript.Arguments(0)))
复制代码





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