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

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

本帖最后由 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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)))
复制代码
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

回复 9# ygqiang


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

TOP

回复 8# taofan712


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

感觉del /f /q temp.ini应该放在bat文件最后面。

TOP

回复 7# ygqiang
不跳过空行,论坛已经有很多帖子在用findstr的方法。
这个题我个人觉得难度在于如何获取user231。

TOP

回复 6# taofan712


  多谢。初步测试成功了。

TOP

本帖最后由 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
复制代码
新人练手,请求加分鼓励
1

评分人数

TOP

回复 4# ygqiang


是否通用不知道,看你是否有能力看懂代码、修改代码吧。
http://bbs.bathome.net/thread-43341-1-1.html#pid196603

TOP

回复 2# GNU

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

感觉跟这个帖子的问题。应该有通用的解决方法吧?

TOP

回复 2# GNU


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

TOP

替换成什么内容?

TOP

返回列表