标题: [文本处理] [已解决]批处理如何将bat文件里的指定字符串替换成其他内容? [打印本页]
作者: ygqiang 时间: 2015-12-4 10:38 标题: [已解决]批处理如何将bat文件里的指定字符串替换成其他内容?
本帖最后由 pcl_test 于 2016-9-4 19:22 编辑
[已解决]bat如何搜索并修改bat文件中的关键字?比如搜索:软件aa,修改为:软件bb?
作者: pcl_test 时间: 2015-12-4 11:48
sed -i "s/软件aa/软件bb/g" "测试.bat"
作者: ygqiang 时间: 2015-12-4 14:24
回复 2# pcl_test
这个命令:sed.exe -i "s/测试/好用/g" "c:\zcom.bat"
提示不成功。。。
c:\zcom.bat文件内容如下:- @echo off
- if "%1" == "h" goto begin
- mshta vbscript:createobject("wscript.shell").run("%~fs0 h",0)(window.close)&&exit
- :begin
- rem 下边开始写批处代码了
-
- set yktserv=10.10.128.13
- echo 服务器1
- set ywserv=192.168.11.118
- echo 服务器2
-
- echo ———————————————————————————— >nul 2>nul
- echo 服务器1
- :netykt
- ping %yktserv% -n 2
- echo %errorlevel%
- if %errorlevel% equ 1 goto :netykt
- ping 127.0.0.1 -n 5
-
- if exist "C:\WINDOWS\system32\RedrCard\AutoRedrCard.exe" (start "" "C:\WINDOWS\system32\RedrCard\AutoRedrCard.exe")
-
- echo ———————————————————————————— >nul 2>nul
- echo 服务器2
- :netyw
- ping %ywserv% -n 2
- echo %errorlevel%
- if %errorlevel% equ 1 goto :netyw
- ping 127.0.0.1 -n 5
- if exist "C:\Libsys\测试.EXE" (start "" "C:\Libsys\测试.exe")
- ———————————————————————
- :firsta
-
- set "t=%time: =0%"
- if "%t:~,5%" geq "21:50" if "%t:~,5%" leq "21:52" goto :first11
-
- ping 127.0.0.1 -n 40 >nul 2>nul
- goto :firsta
-
-
-
- ———————————————————————
- :first11
- ping 127.0.0.1 -n 3 >nul 2>nul
- :Main
- @Echo off
- cls
- ;瞬间清理进程
- REM 系统进程
- Echo.audiodg.exe>>c:\Server1.ini
- Echo.cmd.exe>>c:\Server1.ini
- Echo.conhost.exe>>c:\Server1.ini
- Echo.csrss.exe>>c:\Server1.ini
- Echo.dllhost.exe>>c:\Server1.ini
- Echo.dwm.exe>>c:\Server1.ini
- Echo.explorer.exe>>c:\Server1.ini
- Echo.lsass.exe>>c:\Server1.ini
- Echo.lsm.exe>>c:\Server1.ini
- Echo.MacTray.exe>>c:\Server1.ini
- Echo.services.exe>>c:\Server1.ini
- Echo.smss.exe>>c:\Server1.ini
- Echo.svchost.exe>>c:\Server1.ini
- Echo.taskhost.exe>>c:\Server1.ini
- Echo.tasklist.exe>>c:\Server1.ini
- Echo.wininit.exe>>c:\Server1.ini
- Echo.winlogon.exe>>c:\Server1.ini
- Echo.WmiPrvSE.exe>>c:\Server1.ini
- Tasklist.exe>c:\Exelist1.txt
- FOR /F "skip=5" %%i in (c:\Exelist1.txt) do call :Cmpexe %%i
- DEL /F /Q c:\Server1.ini >Nul 2>Nul
- DEL /F /Q c:\Exelist1.txt >Nul 2>Nul
- ping 127.0.0.1 -n 2 >nul 2>nul
- shutdown.exe -s -t 3
-
-
- Echo. & Echo.结束,任意键再次执行。 & Pause >Nul & Goto Main
- :Cmpexe
- FOR /F %%i IN (c:\Server1.ini) DO IF %*==%%i Goto :END
- REM Echo. & Echo.任意键清理 %*
- REM Pause >Nul
- Taskkill.exe -IM %** -F
- :END
复制代码
作者: ygqiang 时间: 2015-12-4 14:24
回复 2# pcl_test
http://pan.baidu.com/s/1pJkDALt
从这里下载的sed.exe
作者: pcl_test 时间: 2015-12-4 14:45
回复 4# ygqiang
测试没有问题,权限不够吗?文件占用了?
作者: ygqiang 时间: 2015-12-4 15:03
本帖最后由 ygqiang 于 2015-12-4 15:04 编辑
回复 5# pcl_test - copy /y *总common*.bat zcom.bat
- sed.exe -i "s/测试/好用/g" "zcom.bat"
- move /y zcom.bat c:\zcom.bat
复制代码
搞定了。。。好像sed命令,不支持带路径的文件名。
作者: ygqiang 时间: 2015-12-4 15:04
回复 5# pcl_test - sed.exe -i "s/测试/好用/g" "c:\zcom.bat"
复制代码
这个一直不成功。。。- sed.exe -i "s/测试/好用/g" "zcom.bat"
复制代码
这个就成功了。。
作者: ygqiang 时间: 2015-12-6 18:17
回复 5# pcl_test
好像 不需要第3方命令。。bat本身的代码就能解决了。。- @echo off
-
-
- set "修改前的字符串=测试"
- set "修改后的字符串=替换"
-
-
- copy /y 源件.bat c:\副本.bat
- cd /d c:\
-
- for /f "delims=" %%i in ('dir /b /a-d 副本.bat') do (
- (for /f "delims=" %%j in ('findstr /n .* "%%i"') do (
- set "s=%%j"
- setlocal enabledelayedexpansion
- set "s=!s:%修改前的字符串%=%修改后的字符串%!"
- set "s=!s:*:=!"
- echo;!s!
- endlocal
- ))>xx.tmp
- move xx.tmp "%%i"
- )
- copy /y c:\副本.bat "%userprofile%\「开始」菜单\程序\启动"
-
- cls
- ping 127.0.0.1 -n 5 >nul 2>nul
- exit
复制代码
作者: pcl_test 时间: 2015-12-6 18:46
回复 8# ygqiang
如果有特殊字符,你就会知道各种酸爽
作者: ygqiang 时间: 2015-12-6 18:47
回复 9# pcl_test
set "修改前的字符串=测试"
set "修改后的字符串=替换"
意思是:这里的“测试”和“替换”,如果带有特殊字符,就会失效?
作者: pcl_test 时间: 2015-12-6 19:14
回复 10# ygqiang
试试把8楼代码的=和*替换成a和b
作者: 我来了 时间: 2016-9-4 19:03
回复 9# pcl_test
过来人 说得在理啊。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |