jelly 发表于 2016-4-28 09:17:30

bat如何对一个txt文件查找111替换成222

bat如何对一个txt文件查找111替换成222

百度搜索的既然都不行;求高手指点;最好能贴完整的BAT脚本内容;谢谢。

zyypp 发表于 2016-4-30 01:10:59


namur 发表于 2016-4-29 20:36

能不能直接写给我,这些代码根本看不懂。。。[*]@echo off
[*]SetLocal EnableDelayedExpansion
[*]set path=%1
[*]set file=%2
[*]set raw=%3
[*]set replace=%4
[*]
[*]
[*]set "file=%file:"=%"
[*]for /f "delims=" %%i in ('dir /s/b "%path%" "%file%"') do (
[*]      for /f "delims=" %%a in ('type "%%~fi"') do (
[*]                set "foo=%%a"
[*]                call,set foo=%%foo:%raw%=%replace%%%
[*]                call,echo/%%foo%%>>"%%~fi._"
[*]      )
[*]      move "%%~fi._" "%%~fi"
[*])复制代码

用法:
将以上代码保存为 bat文件
那么使用方法就是bat文件 "完整路径" "文件扩展名" 替换前内容 替换后内容
举个栗子
保存为bat.bat
[*]bat.bat "G:\test\txt" "*.txt" 我是替换前的字符   我是替换后的字符 复制代码

代码缺点替换前和替换后的字符中不支持空格


PS:嫌弃一下伸手党,脚本啊、代码啊。如果自己不去接触,不去了解,不去写。那永远都不可能会的。

houlai 发表于 2016-4-29 20:36:00

本帖最后由 houlai 于 2016-4-28 09:21 编辑

------------------------------


shell用习惯了,忘了你是要bat

cgs3238 发表于 2016-4-28 09:19:27

1、创建一个sed.vbs文件,内容
[*]Dim pat, patparts, rxp, inp
[*]pat = WScript.Arguments(0)
[*]patparts = Split(pat,"/")
[*]Set rxp = new RegExp
[*]rxp.Global = True
[*]rxp.Multiline = False
[*]rxp.Pattern = patparts(1)
[*]Do While Not WScript.StdIn.AtEndOfStream
[*]inp = WScript.StdIn.ReadLine()
[*]WScript.Echo rxp.Replace(inp, patparts(2))
[*]Loop复制代码

2、执行命令
[*]cscript //NoLogo sed.vbs s/(111)/(222)/outfile.txt
[*]del inpfile.txt
[*]ren outfile.txt inpfile.txt
[*]复制代码

a1328788808 发表于 2016-4-28 09:29:26


cgs3238 发表于 2016-4-28 09:29

1、创建一个sed.vbs文件,内容



膜拜大神。

zyypp 发表于 2016-4-28 09:32:01

[*]@echo off
[*]setlocal enabledelayedexpansion
[*]set file=文件路径
[*]set "file=%file:"=%"
[*]for %%i in ("%file%") do set file=%%~fi
[*]echo.
[*]set replaced=需替换原字符
[*]echo.
[*]set all=替换为
[*]for /f "delims=" %%i in ('type "%file%"') do (
[*]    set str=%%i
[*]    set "str=!str:%replaced%=%all%!"
[*]    echo !str!>>"%file%"_tmp.txt
[*])
[*]copy "%file%" "%file%"_bak.txt >nul 2>nul
[*]move "%file%"_tmp.txt "%file%"复制代码

zyypp 发表于 2016-4-28 09:29:00

当然也可以修改为
[*]@echo off
[*]setlocal enabledelayedexpansion
[*]set file=%1
[*]set "file=%file:"=%"
[*]for %%i in ("%file%") do set file=%%~fi
[*]echo.
[*]set replaced=%2
[*]echo.
[*]set all=%3
[*]for /f "delims=" %%i in ('type "%file%"') do (
[*]    set str=%%i
[*]    set "str=!str:%replaced%=%all%!"
[*]    echo !str!>>"%file%"_tmp.txt
[*])
[*]copy "%file%" "%file%"_bak.txt >nul 2>nul
[*]move "%file%"_tmp.txt "%file%"复制代码

将以上代码保存为任意名称的bat比如mod.bat
然后调用方法

mod.bat完整文件路径原字符替换后的字符

bigexiu 发表于 2016-4-28 17:21:20

Mark

mns 发表于 2016-4-28 17:25:10

[*]grep -rl 旧字符 文件 | xargs sed -i 's/旧字符/新字符/g'
[*]复制代码

namur 发表于 2016-4-28 17:57:11


zyypp 发表于 2016-4-28 17:25

当然也可以修改为
牛啊,大哥,我一直有个问题,也是txt替换的,文件夹1下面有0到999个文件夹,0到999每个文件夹下都有很多txt文件,路径是这样的\txt\1\10\,\txt\1\11\ ,现在的问题是,我想批量替换这些txt内容,随便什么内容都可以。可以实现吗?
页: [1] 2
查看完整版本: bat如何对一个txt文件查找111替换成222