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

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

[复制链接]
发表于 2017-3-1 20:21:56 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2017-3-1 20:33:54 | 显示全部楼层
替换成什么内容?
 楼主| 发表于 2017-3-1 20:34:56 | 显示全部楼层
回复 2# GNU


    搜索userx关键字,然后替换成user%y%,y变量是手动输入的数字。
 楼主| 发表于 2017-3-1 20:37:35 | 显示全部楼层
回复 2# GNU

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

感觉跟这个帖子的问题。应该有通用的解决方法吧?
发表于 2017-3-1 20:44:34 | 显示全部楼层
回复 4# ygqiang


是否通用不知道,看你是否有能力看懂代码、修改代码吧。
http://bbs.bathome.net/thread-43341-1-1.html#pid196603
发表于 2017-3-1 21:44:43 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
ygqiang + 1 谢谢

查看全部评分

 楼主| 发表于 2017-3-1 21:55:39 | 显示全部楼层
回复 6# taofan712


  多谢。初步测试成功了。
发表于 2017-3-1 22:05:42 | 显示全部楼层
回复 7# ygqiang
不跳过空行,论坛已经有很多帖子在用findstr的方法。
这个题我个人觉得难度在于如何获取user231。
 楼主| 发表于 2017-3-1 23:13:26 | 显示全部楼层
回复 8# taofan712


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

感觉del /f /q temp.ini应该放在bat文件最后面。
发表于 2017-3-1 23:24:47 | 显示全部楼层
回复 9# ygqiang


   是我 疏忽了,我是分成的两个bat在写,边写边测试,最后合起来的时候没检查仔细。del确实应该放最后。。。
出现双倍空行,是因为第二段代码里面用的是temp.ini,里面不必判断空行,所以应该把if = “” 去掉。
已经在6楼改正。
发表于 2017-3-2 08:51:52 | 显示全部楼层
  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)))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 08:09 , Processed in 0.015285 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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