Board logo

标题: [文本处理] 批处理怎样替换包含空格的字符串? [打印本页]

作者: FIR1987    时间: 2011-4-27 14:14     标题: 批处理怎样替换包含空格的字符串?

  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /f  "delims=" %%i in ( c:\bat3.txt ) do (
  3. set var=%%i
  4. set var=!var:Timing, TOTAL TIME (CREATE CUBE)=Timing!
  5. echo !var! >> c:\newbat3.txt
  6. )
  7. PAUSE
复制代码
用这段代码替换 如果!var:a=b! 是这样的字母好使,但是如果中间有空格 就不好用了
其实我想把Timing, TOTAL TIME (CREATE CUBE)整个在文本中删除。多谢
作者: CrLf    时间: 2011-4-27 14:18

感觉是)号的问题,试试改成:
set "var=!var:Timing, TOTAL TIME (CREATE CUBE)=Timing!"
作者: applba    时间: 2011-4-27 14:21

set "str1=Timing, TOTAL TIME (CREATE CUBE)"
set "var=!var:str1="
作者: hanyeguxing    时间: 2011-4-27 14:34

“想把Timing, TOTAL TIME (CREATE CUBE)整个在文本中删除”为什么还要在=后指定Timing呢?
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. (for /f  "delims=" %%i in (c:\bat3.txt) do (
  3.     set "var=%%i"
  4.     set "var=!var:Timing, TOTAL TIME (CREATE CUBE)=!"
  5.     echo;!var!
  6. ))> c:\newbat3.txt
复制代码

作者: FIR1987    时间: 2011-4-27 23:32

4# hanyeguxing

因为我觉得不能没东西 我一直没试出来 呵呵 明天再试试 谢谢版主
作者: FIR1987    时间: 2011-4-27 23:33

2# zm900612
憨豆 你是说我的括号是中文吗 应该不是这个问题吧 我是从日志里截取的啊
作者: FIR1987    时间: 2011-4-28 11:10

感觉是)号的问题,试试改成:
set "var=!var:Timing, TOTAL TIME (CREATE CUBE)=Timing!"
zm900612 发表于 2011-4-27 14:18

憨豆 版主的都可以

憨豆为啥要加双引号 是因为括号吗
作者: hanyeguxing    时间: 2011-4-28 12:02

你在1楼中发的两个都是英文的 Timing, TOTAL TIME (CREATE CUBE)
((前面是英文后面是中文
作者: CrLf    时间: 2011-4-28 13:26

因为()是语块的分隔符,若在语句内含有不应该用于划分语句的)而未转义或加双引号,常会被错误划分:
  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /f  "delims=" %%i in ( c:\bat3.txt ) do 【(
  3. set var=%%i
  4. set var=!var:Timing, TOTAL TIME (CREATE CUBE)】=Timing!
  5. echo !var! >> c:\newbat3.txt
  6. )
  7. PAUSE
复制代码

作者: Hello123World    时间: 2011-4-29 10:59

9# zm900612
【】这中文大括号是什么意思?
作者: hanyeguxing    时间: 2011-4-29 11:04

只是用来提示命令解释器将哪两个括号作为一对来划分,不是代码的内容
作者: yjstone    时间: 2011-5-1 00:47

本帖最后由 yjstone 于 2011-5-1 10:41 编辑

这样就可以了:
  1.     setlocal ENABLEDELAYEDEXPANSION
  2.    for /f  "delims=" %%i in ( c:\bat3.txt ) do (
  3.     set var=%%i
  4.    set var=!var:Timing, TOTAL TIME ^(CREATE CUBE^)=Timing!
  5.     echo !var! >> c:\newbat3.txt
  6.     )
  7.    PAUSE
复制代码

作者: yjstone    时间: 2011-5-1 10:44

还可以更简洁一些:
  1. for /f  "delims=" %%i in ( c:\bat3.txt ) do (
  2.    set var=%%i
  3.    call echo %%var:Timing, TOTAL TIME ^(CREATE CUBE^)=Timing%%>>c:\newbat3.txt
  4.    )
  5.    PAUSE
复制代码





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