Board logo

标题: [文本处理] [已解决]批处理进行文本内容字符串替换时冒号会消失? [打印本页]

作者: welky    时间: 2009-6-8 21:43     标题: [已解决]批处理进行文本内容字符串替换时冒号会消失?

  1. call :replace count wxwei Login.txt
  2. :replace
  3. for /f "tokens=1* delims=:" %%i in ('findstr /n .* %3') do (
  4.     set str=%%j
  5.     if not "!str!"=="" set "str=!str:%1=%2!"
  6.     >>"Auto_tmp.txt" echo.!str!
  7. )
  8. move /y Auto_tmp.txt %3
  9. goto :eof
复制代码
Login.txt中的内容为:
  1. This is a test for replace.
  2. username=count
  3. :Login
  4. Login code
  5. :Exit
  6. exit
  7. ::This is a test
复制代码
用上面的替换程序替换后结果为:
  1. This is a test for replace.
  2. username=wxwei
  3. Login
  4. Login code
  5. Exit
  6. exit
  7. This is a test
复制代码
但希望得到的结果是
  1. This is a test for replace.
  2. username=wxwei
  3. :Login
  4. Login code
  5. :Exit
  6. exit
  7. ::This is a test
复制代码
如何保留冒号?
谢谢

[ 本帖最后由 welky 于 2009-6-8 23:28 编辑 ]
作者: wjjy    时间: 2009-6-8 22:05     标题: 试试?

  1. (for /f "delims=" %%i in (login.txt) do (
  2. if  not %%i==count  echo %%i esle echo wxwei))>login.txt
复制代码

作者: welky    时间: 2009-6-8 22:29

原帖由 wjjy 于 2009-6-8 22:05 发表
(for /f "delims=" %%i in (login.txt) do (
if  not %%i==count  echo %%i esle echo wxwei))>login.txt

谢谢,试了下,但没有达到要求!
作者: fyb198351    时间: 2009-6-8 22:30

改了下.你再看下能行不
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%i in (login.txt) do (
  3.     set var=%%i
  4.     set var=!var:count=wxwei!
  5.     echo !var!>>login2.txt
  6. )
  7. del /q login.txt&ren login2.txt login.txt
复制代码

[ 本帖最后由 fyb198351 于 2009-6-8 22:55 编辑 ]
作者: welky    时间: 2009-6-8 22:33

原帖由 fyb198351 于 2009-6-8 22:30 发表
楼上的代码有几个地方错了@echo off
for /f "delims=" %%i in (login.txt) do (
      if  not %%i==count  (echo %%i) else (
                 echo wxwei
)
  )>>login1.txt
del /q login.txt&ren login1.t ...

count 可能不是在一行的开始,可以在一行的任意地方。
Sorry,没写清楚!
还是谢谢!
作者: wxcute    时间: 2009-6-8 22:54

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :replace count wxwei Login.txt
  4. goto :eof
  5. :replace
  6. for /f "delims=" %%i in ('findstr /n .* %3') do (
  7.     set str=%%i
  8.     set "str=!str:*:=!"
  9.     if not "!str!"=="" set "str=!str:%1=%2!"
  10.     >>"Auto_tmp.txt" echo+!str!
  11. )
  12. ::    >>"Auto_tmp.txt" echo+!str!
  13. move /y Auto_tmp.txt %3
  14. goto :eof
复制代码

[ 本帖最后由 wxcute 于 2009-6-8 22:59 编辑 ]
作者: 随风    时间: 2009-6-8 23:00     标题: 回复 5楼 的帖子

  1. @echo off
  2. call :replace count wxwei Login.txt
  3. :replace
  4. (for /f "delims=" %%i in ('findstr /n .* "%~3"') do (
  5.     set "str=%%i"
  6.     setlocal enabledelayedexpansion
  7.     set "str=!str:*:=!"
  8.     set "str=!str:%~1=%~2!"
  9.     echo;!str!
  10.     endlocal
  11. ))>Auto_tmp.txt
  12. move /y Auto_tmp.txt %3
  13. goto :eof
复制代码

作者: welky    时间: 2009-6-8 23:24

原帖由 wxcute 于 2009-6-8 22:54 发表
@echo off
setlocal enabledelayedexpansion
call :replace count wxwei Login.txt

goto :eof
:replace
for /f "delims=" %%i in ('findstr /n .* %3') do (
    set str=%%i
    set "str=!str:*:=!"
    ...

谢谢斑竹!
能实现想要的功能!
作者: welky    时间: 2009-6-8 23:27

原帖由 随风 于 2009-6-8 23:00 发表
@echo off
call :replace count wxwei Login.txt
:replace
(for /f "delims=" %%i in ('findstr /n .* "%~3"') do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    set "str=!str:*:=!"
    se ...

谢谢超超级版主,你的不仅能保留冒号,连感叹号都能保留!
非常感谢各位。
结贴!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2