Board logo

标题: [文本处理] 批处理如何批量替换txt文件中的指定字符串? [打印本页]

作者: Hamelin    时间: 2016-2-14 18:03     标题: 批处理如何批量替换txt文件中的指定字符串?

现在在一文件夹下有多个txt文件,每个txt文件中都有同一个password字段,现在想把这个oldpassword替换成newpassword。
具体要怎么实现呢
才开始捣鼓这个BAT,有很多地方不是很明白。
作者: ivor    时间: 2016-2-14 19:06

本帖最后由 ivor 于 2016-2-16 17:50 编辑

回复 1# Hamelin

bat:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3. set /a a+=1
  4. for /f "delims=" %%b in ('findstr /n .* "%%a"') do (
  5. set "line=%%b"
  6. set line=!line:*:=!
  7. (if [!line!] neq [] (echo !line:old=new!) else (echo,))>>"%%a.bak"
  8. )
  9. )
  10. echo 统计处理了%a%个TXT文本
  11. pause
复制代码
PowerShell:
  1. foreach ($file in (dir *.txt)){Get-Content($file) | %{$_.Replace("old","new")} | Out-File "$file.bak"}
复制代码
python3.5 :
  1. import os
  2. a = 0
  3. items = os.listdir(".")
  4. newlist = []
  5. for names in items:
  6.     if names.endswith(".txt"):
  7.         a += 1
  8.         fOpen = open(names).readlines()
  9.         wFile = open("%s.bak" % names, "w")
  10.         for line in fOpen:
  11.             wFile.write(line.replace("old", "new"))
  12. print("处理了%d个TXT文本" % a)
复制代码

作者: pcl_test    时间: 2016-2-14 19:59

第三方
sed -i "s/oldpassword/newpassword/g" *.txt
作者: Hamelin    时间: 2016-2-14 20:14

回复 2# ivor


    我想问一下,bat  for 为什么读不到";"开头的行
作者: Hamelin    时间: 2016-2-14 20:16

回复 3# pcl_test


    这个怎么玩啊,只在网上看过几篇bat的简单教程,纯小白一枚
作者: ivor    时间: 2016-2-14 21:26

本帖最后由 ivor 于 2016-2-14 21:42 编辑

回复 5# Hamelin


    CMD对于 特殊字符;头痛,你可以选择第二种和第三种方法,或者 下载sed工具
    我处理了一下;字符,批处理正常使用
作者: Hamelin    时间: 2016-2-14 22:26

回复 6# ivor


    奥,知道了,非常感谢!
作者: WHY    时间: 2016-2-14 22:41

以关键字“替换”搜索本论坛,可以找到几百个类似的答案

for /f 读取文本时默认会忽略以分号“;”开头的行,关闭eol选项(不忽略任何字符开头的行)即可
  1. for /f "delims="eol^= %%i in (";abcd") do echo %%i
复制代码

作者: Hamelin    时间: 2016-2-16 00:35

回复 8# WHY


    好的,谢谢提醒,非常感谢。
作者: Hamelin    时间: 2016-2-16 17:15

回复  Hamelin

batowerShell:python3.5 :
ivor 发表于 2016-2-14 19:06



    你好,又来麻烦你了
现在是这样的情况,当TXT文件中有空行时,使用第一种BAT的方法,空行会打成 old=new  ,这个可以怎么改,才能正常打印空行呢。
作者: ivor    时间: 2016-2-16 17:49

回复 10# Hamelin

加入判断是否为空行
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3. set /a a+=1
  4. for /f "delims=" %%b in ('findstr /n .* "%%a"') do (
  5. set "line=%%b"
  6. set line=!line:*:=!
  7. (if [!line!] neq [] (echo !line:old=new!) else (echo,))>>"%%a.bak"
  8. )
  9. )
  10. echo 统计处理了%a%个TXT文本
  11. pause
复制代码

作者: Hamelin    时间: 2016-2-17 18:32

回复 11# ivor


    非常感谢!




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