Board logo

标题: [文本处理] [已解决]批处理提取时怎样去掉空格? [打印本页]

作者: sbjatje    时间: 2010-9-15 11:16     标题: [已解决]批处理提取时怎样去掉空格?

我有一个文件,1.txt里面内容如下:
  PTC HOSTID = 00-1D-7D-74-B5-C7
现在我想取00-1D-7D-74-B5-C7 这几个字符用于后面的替换
但是用"tokens=2 delims=="  会把00-1D-4D-41-B5-C7前面的那个空格也取到,因为这里是以=分段,取第二段,就以就有一个空格,如果我不想要这个空格,应该在下面程序里如何修改,,,,(我试了下,用空格分段也是不行的)
  1. cd setup\4.0crack
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims==" %%a in (d:\1.txt) do set mac=%%a
  4. (for /f "delims=" %%i in (ptc_licfile.txt) do (
  5.   set str=%%i
  6.   set str=!str:00-00-00-00-00-00=%mac%!
  7.   echo !str!
  8. ))>tmp_
  9. del ptc_licfile.txt
  10. ren tmp_ ptc_licfile.txt
复制代码

[ 本帖最后由 sbjatje 于 2010-9-15 15:47 编辑 ]
作者: TX_kakashi    时间: 2010-9-15 11:54

用tokens=*读一下就无视前面的空格了应该
作者: sbjatje    时间: 2010-9-15 12:32     标题: 语法,上应该如何写呀,,

就帮我在上面改下吧!
作者: Batcher    时间: 2010-9-15 13:00

  1. @echo off
  2. set /p str=<1.txt
  3. echo,%str%
  4. set "mac=%str:~-17%"
  5. echo,%mac%
复制代码

作者: Batcher    时间: 2010-9-15 13:01     标题: 回复 2楼 的帖子

你没看懂楼主的问题吧
作者: sbjatje    时间: 2010-9-15 14:06     标题: Batcher 老大

这里如果我想把你这个倒取字符的指令,写到我上面的批处理里,应该写在那个位置....
    请老大出招,,,,,
作者: TX_kakashi    时间: 2010-9-15 14:26     标题: 回复 5楼 的帖子

lz代码里变量%mac%的值是:[  00-1D-4D-41-B5-C7]
所以我用:
  1. for /f "tokens=*" %%a in ("%mac"%) echo %%a
复制代码
来输出:[ 00-1D-4D-41-B5-C7]
因为变量截取还不熟练,所以用了for来解决了。
作者: TX_kakashi    时间: 2010-9-15 14:30

还不熟练,学着用变量截取试试:
  1. cd setup\4.0crack
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims==" %%a in (d:\1.txt) do set mac=%%a && set "_mac=%mac:~-17%"
  4. (for /f "delims=" %%i in (ptc_licfile.txt) do (
  5.   set str=%%i
  6.   set str=!str:00-00-00-00-00-00=%_mac%!
  7.   echo !str!
  8. ))>tmp_
  9. del ptc_licfile.txt
  10. ren tmp_ ptc_licfile.txt
复制代码

[ 本帖最后由 TX_kakashi 于 2010-9-15 14:32 编辑 ]
作者: sbjatje    时间: 2010-9-15 14:35     标题: 这个也不行,

执行起来没有任何反映,,,,,无法达到替换的效果

[ 本帖最后由 sbjatje 于 2010-9-15 14:41 编辑 ]
作者: TX_kakashi    时间: 2010-9-15 14:38

忘记用延迟变量了。
  1. cd setup\4.0crack
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims==" %%a in (d:\1.txt) do set “mac=%%a” && set "_mac=!mac:~-17!"
  4. (for /f "delims=" %%i in (ptc_licfile.txt) do (
  5.   set str=%%i
  6.   set str=!str:00-00-00-00-00-00=%_mac%!
  7.   echo !str!
  8. ))>tmp_
  9. del ptc_licfile.txt
  10. ren tmp_ ptc_licfile.txt
复制代码

[ 本帖最后由 TX_kakashi 于 2010-9-15 15:34 编辑 ]
作者: sbjatje    时间: 2010-9-15 15:03     标题: 这样还是不行

00-00-00-00-00没有被00-1D-7D-74-B5-C7替换
作者: TX_kakashi    时间: 2010-9-15 15:35

你是不是1.txt的路径错了?我测试没问题呀
作者: sbjatje    时间: 2010-9-15 15:40     标题: 我自己这样改了下,好了,,,

不知道如何修改,再去静静的把for指令的用法看了一次,,,看到一句相当经典的话,for/f 语句中如果没有用 delims= 默认以空格键或跳格键作为分隔符号....
  1. echo off
  2. echo 现在开始为你替换电脑的id号
  3. d:
  4. cd  d:\4.0crack
  5. setlocal enabledelayedexpansion
  6. for /f "tokens=4 " %%a in (d:\1.txt) do set mac=%%a
  7. (for /f "delims=" %%i in (ptc_licfile.txt) do (
  8.     set "str=%%i"
  9.     set "str=!str:00-00-00-00-00-00=%mac%!"
  10.     echo,!str!
  11. ))>tmp_
  12. del ptc_licfile.txt
  13. ren tmp_ ptc_licfile.txt
复制代码
这样就ok了
以空格为分隔 取第4节
感谢楼上的各位老大的帮助....
作者: cui1988wei    时间: 2010-9-15 20:19

  1. @echo off
  2. set /p var=<1.txt
  3. echo %var%
  4. set var="%var: 00=/00%"
  5. for /f "tokens=2 delims=/" %%i in (%var%) do echo %%i
  6. pause
复制代码

作者: sgaizxt001    时间: 2010-9-16 00:17

把for /f "tokens=2 delims==" %%a in (d:\1.txt) do set mac=%%a改为
  1. for /f "tokens=2 delims==" %%a in (d:\1.txt) do (
  2.   set mac=%%a
  3.   set mac=!mac: =!
  4. )
复制代码

就可以了




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