全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 3074|回复: 14

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

[复制链接]
发表于 2016-4-28 09:17:30 | 显示全部楼层 |阅读模式
bat如何对一个txt文件查找111替换成222

百度搜索的既然都不行;求高手指点;最好能贴完整的BAT脚本内容;谢谢。
发表于 2016-4-30 01:10:59 | 显示全部楼层
namur 发表于 2016-4-29 20:36
能不能直接写给我,这些代码根本看不懂。。。
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. set path=%1
  4. set file=%2
  5. set raw=%3
  6. set replace=%4


  7. set "file=%file:"=%"
  8. for /f "delims=" %%i in ('dir /s/b "%path%" "%file%"') do (
  9.         for /f "delims=" %%a in ('type "%%~fi"') do (
  10.                 set "foo=%%a"
  11.                 call,set foo=%%foo:%raw%=%replace%%%
  12.                 call,echo/%%foo%%>>"%%~fi._"
  13.         )
  14.         move "%%~fi._" "%%~fi"
  15. )
复制代码


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

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

PS:嫌弃一下伸手党,脚本啊、代码啊。如果自己不去接触,不去了解,不去写。那永远都不可能会的。
发表于 2016-4-28 09:19:27 | 显示全部楼层
本帖最后由 houlai 于 2016-4-28 09:21 编辑

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


shell用习惯了,忘了你是要bat
发表于 2016-4-28 09:29:26 | 显示全部楼层
1、创建一个sed.vbs文件,内容
  1. Dim pat, patparts, rxp, inp
  2. pat = WScript.Arguments(0)
  3. patparts = Split(pat,"/")
  4. Set rxp = new RegExp
  5. rxp.Global = True
  6. rxp.Multiline = False
  7. rxp.Pattern = patparts(1)
  8. Do While Not WScript.StdIn.AtEndOfStream
  9.   inp = WScript.StdIn.ReadLine()
  10.   WScript.Echo rxp.Replace(inp, patparts(2))
  11. Loop
复制代码


2、执行命令
  1. cscript //NoLogo sed.vbs s/(111)/(222)/ < inpfile.txt > outfile.txt
  2. del inpfile.txt
  3. ren outfile.txt inpfile.txt
复制代码
发表于 2016-4-28 09:32:01 来自手机 | 显示全部楼层
cgs3238 发表于 2016-4-28 09:29
1、创建一个sed.vbs文件,内容



膜拜大神。
发表于 2016-4-28 17:21:20 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set file=文件路径
  4. set "file=%file:"=%"
  5. for %%i in ("%file%") do set file=%%~fi
  6. echo.
  7. set replaced=需替换原字符
  8. echo.
  9. set all=替换为
  10. for /f "delims=" %%i in ('type "%file%"') do (
  11.     set str=%%i
  12.     set "str=!str:%replaced%=%all%!"
  13.     echo !str!>>"%file%"_tmp.txt
  14. )
  15. copy "%file%" "%file%"_bak.txt >nul 2>nul
  16. move "%file%"_tmp.txt "%file%"
复制代码
发表于 2016-4-28 17:25:10 | 显示全部楼层
当然也可以修改为
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set file=%1
  4. set "file=%file:"=%"
  5. for %%i in ("%file%") do set file=%%~fi
  6. echo.
  7. set replaced=%2
  8. echo.
  9. set all=%3
  10. for /f "delims=" %%i in ('type "%file%"') do (
  11.     set str=%%i
  12.     set "str=!str:%replaced%=%all%!"
  13.     echo !str!>>"%file%"_tmp.txt
  14. )
  15. copy "%file%" "%file%"_bak.txt >nul 2>nul
  16. move "%file%"_tmp.txt "%file%"
复制代码


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

mod.bat  完整文件路径  原字符  替换后的字符
发表于 2016-4-28 18:28:08 | 显示全部楼层

linux是先进生产力

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


发表于 2016-4-29 14:26:54 | 显示全部楼层
zyypp 发表于 2016-4-28 17:25
当然也可以修改为

牛啊,大哥,我一直有个问题,也是txt替换的,文件夹1下面有0到999个文件夹,0到999每个文件夹下都有很多txt文件,路径是这样的\txt\1\10\,\txt\1\11\ ,现在的问题是,我想批量替换这些txt内容,随便什么内容都可以。可以实现吗?
发表于 2016-4-29 15:39:51 | 显示全部楼层
namur 发表于 2016-4-29 14:26
牛啊,大哥,我一直有个问题,也是txt替换的,文件夹1下面有0到999个文件夹,0到999每个文件夹下都有很多 ...

需要把现有的代码再嵌套进一个for循环中 使用循环的内容就是 dir遍历目录下的所有txt文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-3-28 22:00 , Processed in 0.093599 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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