Board logo

标题: [文本处理] [已解决]批处理怎样转换文本字符中的感叹号? [打印本页]

作者: yue    时间: 2011-5-23 21:40     标题: [已解决]批处理怎样转换文本字符中的感叹号?

本帖最后由 yue 于 2011-5-23 22:57 编辑

----------------------------- 1.txt 中的代码如下: ---------------------------------------
123!456!789!abc!def
666!jjj55!ff!!!hh
------------------------------ 转换.bat 代码如下: ---------------------------------------
  1. for /f "tokens=*" %%i in ( .\1.txt) do (
  2.     set inpt=%%i
  3. set "var=!inpt:!=#!"
  4. >>".\2.txt" echo !var!
  5. )
复制代码
--------------------------------------------------------------------------------------------
目的: 想要在不改动 1.txt 中的内容下,而要把 1.txt 中的 "感叹号" 全部转换为 "#" 字符!!
转换出来的 2.txt 内容效果应该是:
123#456#789#abc#def
666#jjj55#ff###hh

问题: 经过 for 语句后感叹号消失了!

******   不知道哪位高手可以解决这个问题?  *******
作者: CrLf    时间: 2011-5-23 21:52

1、当心%%i中的感叹号被当成变量
2、无法在延迟扩展变量中替换英文感叹号
  1. @echo off
  2. for /f "tokens=*" %%i in ( .\1.txt) do (
  3.     endlocal
  4.     set inpt=%%i
  5.     call set "var=%%inpt:!=#%%"
  6.     setlocal enabledelayedexpansion
  7.     >>".\2.txt" echo !var!
  8. )
复制代码

作者: Commander    时间: 2011-5-23 22:00

  1. @echo off
  2. cd.>2.txt
  3. for /f "delims=" %%a in (1.txt) do (
  4.     set inpt=%%a
  5.     call set var=%%inpt:!=#%%
  6.     >>2.txt call echo,%%var%%
  7. )
复制代码

作者: yue    时间: 2011-5-23 22:24

试了以上两个方案; 还是没能替换掉啊!!
作者: yue    时间: 2011-5-23 22:30

for /f "tokens=*" %%i in ( .\1.txt) do (
    endlocal
    set inpt=%%i
    call :dd
    setlocal enabledelayedexpansion
    >>".\2.txt" echo !var!
)
:dd
set var=%inpt:!=#%

哇!!我把 zm900612 的稍微改了下,这样就ok了, 哈哈; 解决问题了
作者: Batcher    时间: 2011-5-24 00:05

2# zm900612


这个代码没测试就贴出来了吧?
作者: CrLf    时间: 2011-5-24 12:23

6# Batcher


无语,当时没发现,今天试了下真的出错了,积累了一定的代码经验以后就经常不测试了,所以错误比较多...
看代码没发现问题,百思不得其解,最后才想到是%%i的原因,这参数真造孽




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