[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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 编辑 ]
1

评分人数

    • 随风: 感谢主动给标题加上“以解决”PB + 2

试试?

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

TOP

原帖由 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

谢谢,试了下,但没有达到要求!

TOP

改了下.你再看下能行不
  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 编辑 ]

TOP

原帖由 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,没写清楚!
还是谢谢!

TOP

  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 编辑 ]
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回复 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
复制代码
技术问题请到论坛发帖求助!

TOP

原帖由 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:*:=!"
    ...

谢谢斑竹!
能实现想要的功能!

TOP

原帖由 随风 于 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 ...

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

TOP

返回列表