标题: [文本处理] 如何批量替换指定文件夹特定文件的文本(包含特殊字符)? [打印本页]
作者: xzwcn 时间: 2019-10-14 21:17 标题: 如何批量替换指定文件夹特定文件的文本(包含特殊字符)?
- @echo off
- set oldStr=\\127.0.0.1\projects$\dll\
- set newStr=..\..\..\dll\
- set /p DirectoryPath=请输入或拖入源文件夹路径:
- set /p ToUpdateType=请输入要修改的文件类型:
- rem .......................%oldStr%=%newStr%............................................
- pause
复制代码
如何批量修改指定目录,指定文件类型的文本,例如:把\\127.0.0.1\projects$\dll\替换为..\..\..\dll\
作者: xzwcn 时间: 2019-10-15 09:37
本帖最后由 xzwcn 于 2019-10-15 09:44 编辑
- @echo off
-
- set /p directoryPath=Pleast input Directory Path:
- ::set /p fileType=Pleast input File Type:
- set fileType=csproj
- set strOld=\\127.0.0.1\projects$\dll\
- set strNew=..\..\..\dll\
- echo ***** Replace "%strOld%" as "%strNew%" *****
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in ('dir %directoryPath%\*.%fileType% /b /s') do (
- set "var=%%i"
- if not !var!.==. (
- rem 单个文件一行行处理,将旧字段替换成新字段
- for /f "tokens=*" %%j in (!var!) do (
- set "tmp=%%j"
- if not !tmp!.==. (
- set "tmp=!tmp:%strOld%=%strNew%!"
- rem 将处理后的每一行记录追加到temp.txt文件中
- echo !tmp!>>temp.txt
- )
- )
- rem 在单个文件的每一行经过替换操作后,将处理后的文本从temp.txt临时文件剪贴到目标处理文件中(剪贴后临时文件会自动删除)
- move temp.txt !var!
-
- echo !var!
- )
- )
-
- pause
复制代码
这样写,基本测试能过,有明显的Bug么?
参考资料:
DOS001 用批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正) - Dylaniou的博客 - CSDN博客
https://blog.csdn.net/u010425839/article/details/76595665
作者: Batcher 时间: 2019-10-15 10:50
回复 2# xzwcn
你把特殊字符挨个测试一遍就知道有没有bug啦
作者: xzwcn 时间: 2019-10-27 09:24
回复 3# Batcher
批处理的编码与要替换的文件编码不同,可能会乱码
作者: Batcher 时间: 2019-10-27 21:30
回复 4# xzwcn
如果你需要考虑编码的问题,建议改用 PowerShell 试试。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |