找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31062|回复: 11

[文本处理] 批处理如何批量替换txt文件中的指定字符串?

[复制链接]
发表于 2016-2-14 18:03:44 | 显示全部楼层 |阅读模式
现在在一文件夹下有多个txt文件,每个txt文件中都有同一个password字段,现在想把这个oldpassword替换成newpassword。
具体要怎么实现呢
才开始捣鼓这个BAT,有很多地方不是很明白。
发表于 2016-2-14 19:06:22 | 显示全部楼层
本帖最后由 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. )
  11. echo 统计处理了%a%个TXT文本
  12. 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)
复制代码
发表于 2016-2-14 19:59:12 | 显示全部楼层
第三方
sed -i "s/oldpassword/newpassword/g" *.txt
 楼主| 发表于 2016-2-14 20:14:57 | 显示全部楼层
回复 2# ivor


    我想问一下,bat  for 为什么读不到";"开头的行
 楼主| 发表于 2016-2-14 20:16:24 | 显示全部楼层
回复 3# pcl_test


    这个怎么玩啊,只在网上看过几篇bat的简单教程,纯小白一枚
发表于 2016-2-14 21:26:06 | 显示全部楼层
本帖最后由 ivor 于 2016-2-14 21:42 编辑

回复 5# Hamelin


    CMD对于 特殊字符;头痛,你可以选择第二种和第三种方法,或者 下载sed工具
    我处理了一下;字符,批处理正常使用
 楼主| 发表于 2016-2-14 22:26:51 | 显示全部楼层
回复 6# ivor


    奥,知道了,非常感谢!
发表于 2016-2-14 22:41:18 | 显示全部楼层
以关键字“替换”搜索本论坛,可以找到几百个类似的答案

for /f 读取文本时默认会忽略以分号“;”开头的行,关闭eol选项(不忽略任何字符开头的行)即可
  1. for /f "delims="eol^= %%i in (";abcd") do echo %%i
复制代码
 楼主| 发表于 2016-2-16 00:35:10 | 显示全部楼层
回复 8# WHY


    好的,谢谢提醒,非常感谢。
 楼主| 发表于 2016-2-16 17:15:37 | 显示全部楼层
回复  Hamelin

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



    你好,又来麻烦你了
现在是这样的情况,当TXT文件中有空行时,使用第一种BAT的方法,空行会打成 old=new  ,这个可以怎么改,才能正常打印空行呢。
发表于 2016-2-16 17:49:47 | 显示全部楼层
回复 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. )
  11. echo 统计处理了%a%个TXT文本
  12. pause
复制代码
 楼主| 发表于 2016-2-17 18:32:51 | 显示全部楼层
回复 11# ivor


    非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:00 , Processed in 0.010980 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表