我在网上找的可以参考的例子:
@echo off
setlocal
rem DPATH : 指定目录
rem FILETYPE: 指定文件类型
rem SCONTENT: 替换前的字符串
rem DCONTENT: 替换后的字符串
rem TMPFILE : 临时文件
set DPATH=c:\test
set FILETYPE=*.txt
set SCONTENT=aaa
set DCONTENT=bbb
set TMPFILE=%random%.tmp
for /r %DPATH% %%i in ( %FILETYPE% ) do (
if exist %TMPFILE% ( del /f/q %TMPFILE% )
for /f "tokens=*" %%j in (%%i) do (
set TMP=%%j
echo !TMP:%SCONTENT%=%DCONTENT%! >> %TMPFILE%
)
move /y %TMPFILE% %%i
)
endlocal
把以上内容保存为replace.bat,然后在命令行下执行cmd :on /c replace.bat
本例子实现了把c:\test目录(包括子目录)中所有txt文件中的aaa替换成bbb。
还有一个获得当前目录名的参考例子
@echo off
for /f "delims=" %%i in ("%cd%") do (
if %%i EQU %%~di\ (
echo %%~di
) else (
echo %%~ni
)
)
pause>nul
set file=
set /p file= 请把要处理的文件拉到本窗口:
set "file=%file:"=%"
for %%i in ("%file%") do set "file=%%~fi"
echo.
set replaced=
set /p replaced= 请输入即将被替换的内容:
echo.
set all=
set /p all= 请输入替换字符串:
cd.>"%file%_tmp.txt"
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file%"') do (
set str=%%j
if not "!str!"=="" set "str=!str:%replaced%=%all%!"
>>"%file%_tmp.txt" echo.!str!
)
copy "%file%" "%file%_bak.txt" >nul 2>nul
move "%file%_tmp.txt" "%file%"
版主啊。。。就是强。。。牛叉人物!!!
改好了
@echo off & SetLocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s/a-d .\*.html .\*.ini') do (
for /f "delims=" %%b in ("%%a\..") do (set dirname=%%~nxb)
for /f "usebackq delims=" %%c in ("%%~a") do (
set string=%%c
call set string=%%string:!dirname!=B\%%
echo.!string!>>temp.txt
)
del "%%~a" && move temp.txt "%%~a"
)
pause
下接5楼
[ Last edited by gongcctv on 2008-2-20 at 11:59 PM ]作者: lxmxn 时间: 2008-2-19 23:35
Quote:
set DPATH=c:\test
set FILETYPE=*.txt
set SCONTENT=aaa
set DCONTENT=bbb
[ Last edited by gongcctv on 2008-2-19 at 11:41 PM ]作者: moniuming 时间: 2008-2-20 20:44 %cd%作者: gongcctv 时间: 2008-2-20 23:56 标题: 感谢版主的耐心帮忙,谢谢
感谢版主的耐心帮忙,谢谢
我将过程帖出来,希望能帮到一些朋友们。。谢谢
@echo off & SetLocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s/a-d .\*.txt') do (
for /f "delims=" %%b in ("%%a\..") do (set dirname=%%~nxb)
for /f "usebackq delims=" %%c in ("%%~a") do (
set string=%%c
call set string=%%string:!dirname!\=%%
echo.!string!>>temp.txt
)
del "%%~a" && move temp.txt "%%~a"
)
rem 版主。。。还有一个小小小问题。。。。如果我要处理 “目录名\" 这个"\"要加在哪啊。。(加
rem 在!dirname!后面)
rem 只能修改没有特殊符号的文件夹里的东东
pause
rem 我把里面的b\ 去掉后会出现错误。。。。
因为我想有时候会想把那个 “目录名\"删掉而不是替换掉。。。
RE: 那你就去掉b\\
(这个版本对文件夹有特殊字符不能处理会出现错误,下面的版要用到sed.exe)
用sed
版本1
@echo off & SetLocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s/a-d .\*.htm') do (
for /f "delims=" %%b in ("%%a\..") do (set dirname=%%~nxb)
sed "s/!dirname!\\/B\\/g" "%%~a" > temp.txt
del "%%~a" && move temp.txt "%%~a"
)
如果想要修改的是不是"目录然\"而是"目录名/"
sed "s/!dirname!\\/B\\/g" "%%~a" > temp.txt
修改成
sed "s/!dirname!\//B\//g" "%%~a" > temp.txt
版本2 测试未通过
@echo off
for /f "delims=" %%a in ('dir /b/s/a-d .\*.html .\*.ini') do (
for /f "delims=" %%b in ("%%a\..") do (set dirname=%%~nxb)
pushd "%%~dpa"
SetLocal EnableDelayedExpansion
sed "s:!dirname!::g" "%%~nxa"|more>temp.txt
popd&endlocal
del "%%~a" && move temp.txt "%%~a"
)
[ Last edited by gongcctv on 2008-2-21 at 12:01 AM ]