批处理文件操作:替换文本文件某系字符写入新文件、遍历目录并进行字符串替换、拷贝文件到新目录、去掉文件扩展名

批处理替换文本中某些字符并写入新文件

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (
原文件
.txt) do (
   
set aa=%%a
    set aa=!aa:
要替换的字符=!
   
echo !aa!>>d:\
新文件.txt
)
del
原文件
.txt
ren "d:\
新文件.txt" "原文件
.txt"
pause

问题点:文件中的空行会消失,不能处理特殊字符的替换,比如!等。

 

用批处理替换文本的问题查找D:\web\kk8k\web\agg这个文件夹里所有的txt文件。只要哪个txt文件里有aaaa或者bbbb就替换成cccc

@echo off
setlocal enabledelayedexpansion
set lj=D:\web\kk8k\web\agg
if not exist !lj! echo 找不到!lj!这个路径.&&pause&&exit
cd /d "!lj:"=!"
if not exist *.txt echo 找不到txt文档&&pause&&exit
for %%i in (*.txt) do (
if exist %%i.bak echo 已经替换过.&&pause&&exit
ren "%%i" "%%i.bak"
)
for %%i in (*.bak) do (
set b=%%i
for /f "tokens=* usebackq" %%j in ("%%i") do (
set a=%%j
set a_01=!a:aaaa=cccc!
set a_02=!a_01:bbbb=cccc!
>>"!b:.bak=!" echo !a_02!
)
)
echo 完成.
pause

 

批处理遍历目录文件做字符串替换

在做商铺的产品页时,需要对原有的产品链接替换,因为模板有100套,每套要替换2个文件,手头也没啥好的替换工具,zendStudio虽然有在目录下各文件中查找字符串的神级功能,但是替换只能针对一个文件替换,实在不想手动一个个替换,决心整个批处理程序。对着网上别人的例子,和查找批处理命令,很快做出了个两层for循环,大意如下:第一层for   递归遍历目录下的所有文件    /r第二层for   循环文件中的每一行              /f然后每行做字符替换,并将结果输入到一个文件零时文件中,然后用零时文件替换原有的文件原本以为很简单,但是批处理特别的机制,让在for下的set出了点异常,可以百度了解一下批处理的环境变量延迟扩展最终还是找到了解决办法,虽然是费了不少时间。
完整代码如下:大家以后有需求可以借鉴:

@echo off                                                ::关闭回显,不会看到执行的代码

setlocal enabledelayedexpansion       ::使用!作为分隔符启用延迟的环境变量

for /r %%c in (*.html) do (     ::递归批处理文件所在的目录将每个*.html文件复制给%%c   

for /f "tokens=*" %%x in (%%c) do (  ::遍历%%c文件中的没一行,将每行数据复制个%%x 

set line=%%x                                          ::%%x赋值个line       

echo !line:xh=abc! >>tmp.txt              ::将替换后的行追加到tmp.txt的零时文件中   

)

move tmp.txt %%c                                ::用零时文件替换原来处理的文件

rem echo %%c is replaced!

)

pause

缺点:用批处理来做文件替换是挺麻烦的,需要考虑特殊字符、空行等

去掉文件的扩展名:

@echo off

setlocal enabledelayedexpansion

set lj=F:\sm

if not exist !lj! echo 找不到!lj!这个路径.&&pause&&exit

cd /d "!lj:"=!"

set file=heg.prm

rem if not exist *.hdf echo 找不到hdf文件&&pause&&exit

for /r F:\sm %%i in (*.hdf) do (

for /f "delims=" %%j in (%file%) do (

set a=%%j

set a_01=!a:in_put=%%~ni!              注释:~n即可去掉文件最后一个扩展名

echo !a_01!>>hegrepeat.prm

)

)

echo 完成.

Pause

把一个目录下的所有文件包括子文件夹里有很多.txt 复制到另一个目录下的一个文件夹里

例如:E:\AAA 里面有很多子文件夹,子文件夹内有很多.txt文件,全部.txt复制到E:\BBB,不要复制子文件夹,这样在E:\BBB文件夹下就可以看到txt文件,谢谢

以下批处理即可实现你要的功能。

@echo OFF
set inputPath=E:\AAA
set outputPath=E:\BBB
for /f "tokens=*" %%a in (
               'dir "%inputPath%\*.txt" /s /a-d /b'
) do (
               copy "%%a" "%outputPath%\"
)
PAUSE

猜你喜欢

转载自blog.csdn.net/wjk343977868/article/details/8279972
今日推荐