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

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

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

本帖最后由 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)
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

第三方
sed -i "s/oldpassword/newpassword/g" *.txt

TOP

回复 2# ivor


    我想问一下,bat  for 为什么读不到";"开头的行

TOP

回复 3# pcl_test


    这个怎么玩啊,只在网上看过几篇bat的简单教程,纯小白一枚

TOP

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

回复 5# Hamelin


    CMD对于 特殊字符;头痛,你可以选择第二种和第三种方法,或者 下载sed工具
    我处理了一下;字符,批处理正常使用
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 6# ivor


    奥,知道了,非常感谢!

TOP

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

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

TOP

回复 8# WHY


    好的,谢谢提醒,非常感谢。

TOP

回复  Hamelin

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



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

TOP

回复 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
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 11# ivor


    非常感谢!

TOP

返回列表