Board logo

标题: [已结]提取指定字符串前几个字符的处理 [打印本页]

作者: hackate     时间: 2008-11-21 19:37    标题: [已结]提取指定字符串前几个字符的处理

例如文本文件a.txt内容: abckjdhasldjfajlksdf54k gfasdfgsadfagfdsgsdfgfdsg54ksdfg asdlfkj;alsdjf;lkjfdalskj;alskfjfdjaa54kdfhkdafshka 提取字符串"54k"前面16位不包括54k 提取后结果保存到文本b.txt内容如下: jdhasldjfajlksdf dfagfdsgsdfgfdsg lskj;alskfjfdjaa 看看大家都有什么好的处理方式,我感觉用纯批处理来做这个题有点低效率呢 [ Last edited by HAT on 2008-11-22 at 13:22 ]

作者: HAT     时间: 2008-11-21 19:47
@echo off
setlocal enabledelayedexpansion
for /f %%a in (a.txt) do (
  set "str1=%%a"
  set "str1=!str1:54k= !
  for /f %%h in ("!str1!") do (
    set "str2=%%h"
    echo !str2:~-16!
  )
)
pause

作者: hackate     时间: 2008-11-21 20:03
@echo off for /f "delims=" %%a in (chuli.txt) do ( setlocal enabledelayedexpansion set "hang=%%a" set "hang=!hang:54k= !" call:guolv !hang! endlocal ) pause goto :eof :guolv for /f "delims= " %%b in ("%~1") do ( set "str=%%b" echo !str:~-16! ) goto :eof 用我的方法 其中的 ; 这个符号就会被过滤掉,导致这三行文本,前两行可以正确,但是最后一行取不到16个字符,但是HAT的方式可以做到... 在此想咨询下HAT兄,能否指正一下我错在哪了?是不是因为我使用了CALL传递参数过程传递不了; 这个符号吗?希望能够详细解答下..

作者: hackate     时间: 2008-11-21 20:15
感谢HAT.已经明白了.谢谢谢谢了....

作者: HAT     时间: 2008-11-21 20:23    标题: Re 3楼

1. 如果想把setlocal enabledelayedexpansion放到for里面,建议放到set "hang=%%a"下面,否则会忽略感叹号。 2. 建议养成代码缩进的好习惯。

作者: hackate     时间: 2008-11-22 13:03
谢谢,,一点分数表示感谢..!

作者: cq1005     时间: 2008-12-12 14:41
谢谢谢谢了....