您的位置:首页 > 其它

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

2012-12-10 21:25 453 查看
批处理替换文本中某些字符并写入新文件

@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐