批处理 提取指定字符串前面规定个数的字符串

例如文本文件a.txt内容:
abckjdhasldjfajlksdf54k
gfasdfgsadfagfdsgsdfgfdsg54ksdfg
asdlfkj;alsdjf;lkjfdalskj;alskfjfdjaa54kdfhkdafshka

提取字符串"54k"前面16位不包括54k

提取后结果保存到文本b.txt内容如下:
jdhasldjfajlksdf
dfagfdsgsdfgfdsg
lskj;alskfjfdjaa
如果答的好我还加分!!谢谢

第1个回答  2008-11-21
@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!
)
)>>b.txt
pause

不用楼上那么麻烦的。我的处理方式如上!
把结果保存到b.txt本回答被提问者采纳
第2个回答  2008-11-30
在批处理中要分隔字符串的话,可以用for命令的delims来设置,没有直接以一个字符串来做分隔的,不过你可以先用set命令把字符串替换成一个自己自定义的分隔符,默认系统的分隔符就是空格,你也可以直接换成空格。hackate给你的答案就是用空格做为分隔符。如果你的结果中刚好有空格的话,那你就要自定义分隔符了。思路的话,也就是hackate给你的那个。
第3个回答  2008-11-21
@echo off
setlocal enabledelayedexpansion
call:main
endlocal
echo.
pause>con
goto :eof

:main
set "p=54k"
set "length=3"
(
for /f "delims=" %%i in ('type a.txt') do (
set "line=%%i"
call:findstr line p !length!
if !answer! geq 16 (
set /a "start=answer-16"
for %%i in (!start!) do (echo !line:~%%i,16!)
)
)
)>b.txt
goto :eof

:findstr
set /a "num1=0"
set /a "step=256"
:1
set /a "num2=num1+step-1"
for /l %%i in (!num1!,1,!num2!) do (
if "!%~1:~%%i,%~3!"=="!%~2!" set "answer=%%i" & goto :eof
if "!%~1:~%%i,1!"=="" set "answer=-1" & goto :eof
)
set /a "num1=num1+step"
goto 1
第4个回答  2008-11-23
hackate高手~帮你顶一个~呵呵!

~~以后要多多向你学习了~~

这么精悍的代码,LZ应该加分啊!
第5个回答  2008-11-21
你想要哪个54K前面的内容呀?用substring函数
相似回答