Board logo

标题: [文本处理] 【已解决】请问BAT脚本怎样批量替换很多文件中的某一串字符? [打印本页]

作者: aceamuro    时间: 2022-2-17 10:25     标题: 【已解决】请问BAT脚本怎样批量替换很多文件中的某一串字符?

本帖最后由 aceamuro 于 2022-2-17 16:45 编辑

现在有文件
a1.txt
a2.txt
am.txt
an.txt
也就是a*.txt,每个文件中都有一串或多串相同的字符xxx。

现在有两个问题:
1.假如我想把所有文件的所有xxx字符全部替换成YYY,并且不改变文件名(路径可变可不变),请问要怎么写?
2.问题1中如果不是替换成YYY,而是替换成另一个文件b.txt中的内容,请问要怎么写?

PS:我的意思是整套批量处理,而不是挨个儿改完后另存
作者: qixiaobin0715    时间: 2022-2-17 11:06

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. md Newfiles
  4. for %%i in (a*.txt) do (
  5.     (for /f "delims=" %%a in ('type "%%i"') do (
  6.         set "str=%%a"
  7.         echo,!str:xxx=yyy!
  8.     ))>"Newfiles\%%i"
  9. )
复制代码

作者: aceamuro    时间: 2022-2-17 15:22

本帖最后由 aceamuro 于 2022-2-17 15:55 编辑

回复 2# qixiaobin0715
有点没看明白,do后面为啥加两个括号?
另外如果a*.txt带有路径应该怎么写?直接填(不带空格)的话无法运行
作者: qixiaobin0715    时间: 2022-2-17 16:12

回复 3# aceamuro
比如要处理的文本文件路径为D:\abc,可以在2楼代码第2、3行之间增加一行代码:
  1. cd /d "D:\abc"
复制代码

作者: qixiaobin0715    时间: 2022-2-18 09:08

本帖最后由 qixiaobin0715 于 2022-2-18 09:12 编辑

回复 3# aceamuro
代码第5行前面的左括号是与第8行后面的右括号相对应的,作用是将其间for循环显示的内容(第8行)一次性重定向到一个文本文件中。
举个例子:
  1. (
  2. echo,a
  3. echo,b
  4. echo,c
  5. ....
  6. echo,z
  7. )>a.txt
复制代码
  1. echo,a>a.txt
  2. echo,b>>a.txt
  3. echo,c>>a.txt
  4. ....
  5. echo,z>>a.txt
复制代码
第一组代码与2楼代码类似,是把26个字母一个一行的一次性写入a.txt文件中;
第二组代码是依次将26个字母写入(一次写入一行)a.txt文件中。
写入内容越多,第一组相对第二组代码,其效率就越高。
作者: Batcher    时间: 2022-2-18 10:26

回复 3# aceamuro


提升代码效率的常见方法
https://mp.weixin.qq.com/s/VZk0TmYUpFdCoWK9ZpgL0Q




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2