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

[文本处理] 批处理如何替换指定目录及其子目录下所有指定扩展名/类型的文件中的特定字符串

本帖最后由 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
-----------------------------------------------------------------

下面是我自己写的代码:
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. set str=D:\
  4. pushd %str%
  5. for /f "delims=" %%i in ('dir /a-d/s/b *.ini') do (   
  6. for /f "delims=" %%j in (%%i) do (
  7. set a=%%j
  8. set aa=!a:1234/root=root!
  9. echo !aa!>%%i
  10. )
  11. )
  12. pause
复制代码
为什么最后输出到每个ini文件的结果,会变成只剩最后一行D:"Session Password Saved"=00000001

所以代码要怎么改?

没有解决因为你搜索的不够
http://www.bathome.net/thread-2516-1-1.html

TOP

回复 2# pcl_test


    但是如果把>符号改成>>符号追加内容的话,结果只会在原文内容下面重复追加一次原文内容,虽然指定字符串被修改了,但并不是被覆盖。

TOP

回复 3# lee0x7b

因为你在边读边写,先将结果输出到临时文件,完了替换掉原文件

TOP

回复 4# pcl_test


    像是这样?
  1. for /f "delims=" %%i in ('dir /a-d/s/b *.ini') do (   
  2. for /f "delims=" %%j in (%%i) do (
  3. set a=%%j
  4. echo !a!
  5. set aa=!a:1234/root=root!
  6. echo !aa!>>tmp.ini
  7. )
  8. del %%i
  9. ren tmp.ini %%i
  10. )
复制代码

TOP

回复 5# lee0x7b
echo !a!是什么鬼?文件名有空格怎么办?
还可参考以下替换原文件方式
http://www.bathome.net/redirect. ... 2332&ptid=39409

TOP

回复 6# pcl_test


    echo !a!纯属手误...  但是上面这种方法,还是有问题吧,执行后当前目录下的ini文件被替换成了tmp.ini,子目录下的ini文件全被删除了

TOP

回复 6# pcl_test


        OK我知道怎么改了,是输出到临时文件路径的问题:
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. set str=D:\
  4. pushd %str%
  5. for /f "delims=" %%i in ('dir /a-d /s /b *.ini') do (   
  6. for /f "usebackq delims=" %%j in ("%%i") do (
  7. set a=%%j
  8. set aa=!a:1234/root=root!
  9. echo !aa!>>"%%~dpi\tmp_%%~nxi"
  10. )
  11. move /y "%%~dpi\tmp_%%~nxi" "%%i"
  12. )
  13. pause
复制代码
这样就可以了

谢版主大大~

TOP

本帖最后由 pcl_test 于 2016-8-9 15:02 编辑
  1. @echo off&Setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /a-d/s/b "D:\"*.ini') do (
  3.     for /f "usebackq delims=" %%j in ("%%i") do (
  4.         set "a=%%j"
  5.         >>"%%~dpi临时.文件" echo !a:1234/root=root!
  6.     )
  7.     del "%%i"
  8.     ren "%%~dpi临时.文件" "%%~nxi"
  9. )
  10. pause
复制代码
1

评分人数

TOP

返回列表