现有文件c:\abc.txt文件一个,内容如下
自动传输处理文件系统 abbd
中文 SN##10.ABJ SN10.ABJ copy_get Z: pub3 dmsg r:\cl23s 0010 0510 1 正常传输(11/17/108_0:30)
中文 SN##20.ABJ SN20.ABJ copy_get Z: pub3 dmsg r:\cl23s 0020 0520 0 正常传输(11/17/108_0:40)
中文 SN##30.ABJ SN30.ABJ copy_get Z: pub3 dmsg r:\cl23s 0030 0530 0 正常传输(11/17/108_0:50)
中文 SN##40.ABJ SN40.ABJ copy_get Z: pub3 dmsg r:\cl23s 0040 0540 0 无数据传输
中文 SN##50.ABJ SN50.ABJ copy_get Z: pub3 dmsg r:\cl23s 0050 0550 0 无数据传输
现在我需要的是当出现 “???? ???? 0 正常传输” 或者“???? ???? 0 无数据传输”时,能否把它替换成
“0001 2359 0 正常传输”?
注:文中????为变量数字字符串
参考过对单独的字符串进行替换的办法,但是涉及到几个空格的字符串还得加上临近字符串的替换,就不会处理了,麻烦高手指导下:)
不要试图用字符位置去进行特定字符位替换,在前面的第二个字符,例如:SN##20.ABJ 不是一个固定长度的字符串~~
下面是一个对单独的字符串进行替换的例子,已测试可用。
@echo off
::把需要搜索的路径赋值给变量sp,这里举例是c:\tmp
set sp=c:\tmp
::把需要查找的文件名赋值给变量cf,这里举例是root.txt
set cf=root.txt
::把将被替换的字符串赋值给st,这里举例是apple
set st=apple
::把替换字符串赋值给dt,这里举例是lemon
set dt=lemon
::以上的这些赋值执行后,将会把C盘tmp文件夹下面包括子文件夹里的root.txt中的apple全部替换成lemon
::下面的代码将完成替换工作
for /r %sp% %%a in (%cf%) do (call :doit "%%~dpa")
goto end
:doit
setlocal enabledelayedexpansion
pushd %1
for /f "tokens=1,2* delims=:" %%i in ('findstr /n ".*" %cf%') do (
set txt=%%j
if "!txt!" == "" (
echo.>>%1root.tmp
) else (
echo !txt:%st%=%dt%!>>%1root.tmp
)
)
move /y root.tmp root.txt
:end
[ Last edited by wwwyangxm on 2008-11-17 at 10:09 ]
自动传输处理文件系统 abbd
中文 SN##10.ABJ SN10.ABJ copy_get Z: pub3 dmsg r:\cl23s 0010 0510 1 正常传输(11/17/108_0:30)
中文 SN##20.ABJ SN20.ABJ copy_get Z: pub3 dmsg r:\cl23s 0020 0520 0 正常传输(11/17/108_0:40)
中文 SN##30.ABJ SN30.ABJ copy_get Z: pub3 dmsg r:\cl23s 0030 0530 0 正常传输(11/17/108_0:50)
中文 SN##40.ABJ SN40.ABJ copy_get Z: pub3 dmsg r:\cl23s 0040 0540 0 无数据传输
中文 SN##50.ABJ SN50.ABJ copy_get Z: pub3 dmsg r:\cl23s 0050 0550 0 无数据传输
现在我需要的是当出现 “???? ???? 0 正常传输” 或者“???? ???? 0 无数据传输”时,能否把它替换成
“0001 2359 0 正常传输”?
注:文中????为变量数字字符串
参考过对单独的字符串进行替换的办法,但是涉及到几个空格的字符串还得加上临近字符串的替换,就不会处理了,麻烦高手指导下:)
不要试图用字符位置去进行特定字符位替换,在前面的第二个字符,例如:SN##20.ABJ 不是一个固定长度的字符串~~
下面是一个对单独的字符串进行替换的例子,已测试可用。
@echo off
::把需要搜索的路径赋值给变量sp,这里举例是c:\tmp
set sp=c:\tmp
::把需要查找的文件名赋值给变量cf,这里举例是root.txt
set cf=root.txt
::把将被替换的字符串赋值给st,这里举例是apple
set st=apple
::把替换字符串赋值给dt,这里举例是lemon
set dt=lemon
::以上的这些赋值执行后,将会把C盘tmp文件夹下面包括子文件夹里的root.txt中的apple全部替换成lemon
::下面的代码将完成替换工作
for /r %sp% %%a in (%cf%) do (call :doit "%%~dpa")
goto end
:doit
setlocal enabledelayedexpansion
pushd %1
for /f "tokens=1,2* delims=:" %%i in ('findstr /n ".*" %cf%') do (
set txt=%%j
if "!txt!" == "" (
echo.>>%1root.tmp
) else (
echo !txt:%st%=%dt%!>>%1root.tmp
)
)
move /y root.tmp root.txt
:end
[ Last edited by wwwyangxm on 2008-11-17 at 10:09 ]

