标题: [文本处理] 批处理如何替换指定目录及其子目录下所有指定扩展名/类型的文件中的特定字符串 [打印本页]
作者: lee0x7b 时间: 2016-8-9 12:00 标题: 批处理如何替换指定目录及其子目录下所有指定扩展名/类型的文件中的特定字符串
本帖最后由 pcl_test 于 2016-8-9 12:30 编辑
在坛子内搜索过相关帖子,并没有解决疑问...
假设D盘根目录及其子目录下有多个.ini文件,每个ini文件中含有如下内容:
-----------------------------------------------------------------
S:"Local Shell Command Pre-connect V2"=02
S:"Monitor Username"=
S:"Monitor Password V2"=
S:"Username"=1234/root
S:"Password V2"=02
S:"Login Script V3"=
D:"Session Password Saved"=00000001
-----------------------------------------------------------------
现要将其中的S:"Username"=1234/root替换成S:"Username"=root,其他内容保持不变,即最后效果为每个ini文件变成如下内容:
-----------------------------------------------------------------
S:"Local Shell Command Pre-connect V2"=02
S:"Monitor Username"=
S:"Monitor Password V2"=
S:"Username"=root
S:"Password V2"=02
S:"Login Script V3"=
D:"Session Password Saved"=00000001
-----------------------------------------------------------------
下面是我自己写的代码:- @echo off
- Setlocal enabledelayedexpansion
-
- set str=D:\
- pushd %str%
- for /f "delims=" %%i in ('dir /a-d/s/b *.ini') do (
- for /f "delims=" %%j in (%%i) do (
- set a=%%j
- set aa=!a:1234/root=root!
- echo !aa!>%%i
- )
- )
- pause
复制代码
为什么最后输出到每个ini文件的结果,会变成只剩最后一行D:"Session Password Saved"=00000001?
所以代码要怎么改?
作者: pcl_test 时间: 2016-8-9 12:28
没有解决因为你搜索的不够
http://www.bathome.net/thread-2516-1-1.html
作者: lee0x7b 时间: 2016-8-9 12:40
回复 2# pcl_test
但是如果把>符号改成>>符号追加内容的话,结果只会在原文内容下面重复追加一次原文内容,虽然指定字符串被修改了,但并不是被覆盖。
作者: pcl_test 时间: 2016-8-9 12:43
回复 3# lee0x7b
因为你在边读边写,先将结果输出到临时文件,完了替换掉原文件
作者: lee0x7b 时间: 2016-8-9 12:48
回复 4# pcl_test
像是这样?- for /f "delims=" %%i in ('dir /a-d/s/b *.ini') do (
- for /f "delims=" %%j in (%%i) do (
- set a=%%j
- echo !a!
- set aa=!a:1234/root=root!
- echo !aa!>>tmp.ini
- )
- del %%i
- ren tmp.ini %%i
- )
复制代码
作者: pcl_test 时间: 2016-8-9 12:54
回复 5# lee0x7b
echo !a!是什么鬼?文件名有空格怎么办?
还可参考以下替换原文件方式
http://www.bathome.net/redirect. ... 2332&ptid=39409
作者: lee0x7b 时间: 2016-8-9 13:43
回复 6# pcl_test
echo !a!纯属手误... 但是上面这种方法,还是有问题吧,执行后当前目录下的ini文件被替换成了tmp.ini,子目录下的ini文件全被删除了
作者: lee0x7b 时间: 2016-8-9 14:18
回复 6# pcl_test
OK我知道怎么改了,是输出到临时文件路径的问题:- @echo off
- Setlocal enabledelayedexpansion
-
- set str=D:\
- pushd %str%
- for /f "delims=" %%i in ('dir /a-d /s /b *.ini') do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- set a=%%j
- set aa=!a:1234/root=root!
- echo !aa!>>"%%~dpi\tmp_%%~nxi"
- )
- move /y "%%~dpi\tmp_%%~nxi" "%%i"
- )
- pause
复制代码
这样就可以了
谢版主大大~
作者: pcl_test 时间: 2016-8-9 14:50
本帖最后由 pcl_test 于 2016-8-9 15:02 编辑
- @echo off&Setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d/s/b "D:\"*.ini') do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- set "a=%%j"
- >>"%%~dpi临时.文件" echo !a:1234/root=root!
- )
- del "%%i"
- ren "%%~dpi临时.文件" "%%~nxi"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |