标题: [文本处理] 批处理如何批量替换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:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b *.txt') do (
- set /a a+=1
- for /f "delims=" %%b in ('findstr /n .* "%%a"') do (
- set "line=%%b"
- set line=!line:*:=!
- (if [!line!] neq [] (echo !line:old=new!) else (echo,))>>"%%a.bak"
-
- )
- )
- echo 统计处理了%a%个TXT文本
- pause
复制代码
PowerShell:- foreach ($file in (dir *.txt)){Get-Content($file) | %{$_.Replace("old","new")} | Out-File "$file.bak"}
复制代码
python3.5 :- import os
- a = 0
- items = os.listdir(".")
- newlist = []
- for names in items:
- if names.endswith(".txt"):
- a += 1
- fOpen = open(names).readlines()
- wFile = open("%s.bak" % names, "w")
- for line in fOpen:
- wFile.write(line.replace("old", "new"))
-
- 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选项(不忽略任何字符开头的行)即可- 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
加入判断是否为空行- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b *.txt') do (
- set /a a+=1
- for /f "delims=" %%b in ('findstr /n .* "%%a"') do (
- set "line=%%b"
- set line=!line:*:=!
- (if [!line!] neq [] (echo !line:old=new!) else (echo,))>>"%%a.bak"
-
- )
- )
- echo 统计处理了%a%个TXT文本
- pause
复制代码
作者: Hamelin 时间: 2016-2-17 18:32
回复 11# ivor
非常感谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |