level 11
刘卍1269719868
楼主
完美突破bat的特殊符号!!!
当前支持:文本分割(和易语言的一样) 反转字符串 取字符串长度
由于%1 %2...的会被吞空格一类的特殊符号
所以关于参数的传送都采用固定变量进行
set /p str=">"
call :lostr
echo 文本长度%return%
==========txtol.bat============
@goto :txtolend
::txtol bat文本操作库 BY L.W.C. QQ 1269719868
::当前版本 V0.0001
::需要 setlocal EnableDelayedExpansion
:fzstr
::反转字符串 设定变量str=要翻转的字符
set i=0
:afzstr
if "!str:~%i%,1!" neq "" set /a i+=1&set stxt[%i%]=!str:~%i%,1!&goto :afzstr
for /l %%i in (0,1,!i!) do set r=!stxt[%%i]!!r!
for /l %%i in (0,1,!i!) do set stxt[%%i]=
set i=&set str=
set return=!r!
set r=
exit/b
:lostr
::取字符串长度 设定变量str=要去长度的字符
set i=0
:alostr
if "!str:~%i%,1!" neq "" set /a i+=1&goto :alostr
set return=!i!
set i=&set str=
exit/b
:fgstr
::分割字符串 设定变量str=分割的字符 fg=用于分割的字符 save=储存结果的变量
set r=&set c=1&set i=0
:afgstr
if "!str:~%i%,1!" neq "" set /a i+=1&if /i "!str:~%i%,1!" neq "!fg!" (set r=!r!!str:~%i%,1!&goto :afgstr ) else (set !save![!c!]=!r!&set/a c+=1&set r=&goto :afgstr )
set !save![!c!]=!r!
set i=&set str=&set r=&set c=&set fg=&set save=
exit/b
:txtolend
===================================
==============例子==============
@echo off&@setlocal EnableDelayedExpansion
set "str=a|b|c"&set "fg=|"&set save=yx
call :fgstr
echo !yx[1]!
pause
================================
当然,不能直接使用,还要从编译器过一遍
==============编译器==============
for /f "delims=" %%i in (%~fs1) do echo %%i>>%~fs2
for /f "delims=" %%i in (txtol.bat) do echo %%i>>%~fs2
==================================
总使用流程如下
写好bat
执行:
编译器.bat [预编译的bat] [编译后保存到的bat]
关于bat库化
就是上面的库,只不过编译器升级下,可执行bat中一些伪代码
关于编译器及伪代码构成的bat ,就叫做bat+吧![[滑稽]](/static/emoticons/u6ed1u7a3d.png)
@tmxk0411
@超人硬汉
申精
如果不能加精也至少请重开一个精且置顶的帖子来说明bat+
2015年06月10日 12点06分
1
当前支持:文本分割(和易语言的一样) 反转字符串 取字符串长度
由于%1 %2...的会被吞空格一类的特殊符号
所以关于参数的传送都采用固定变量进行
set /p str=">"
call :lostr
echo 文本长度%return%
==========txtol.bat============
@goto :txtolend
::txtol bat文本操作库 BY L.W.C. QQ 1269719868
::当前版本 V0.0001
::需要 setlocal EnableDelayedExpansion
:fzstr
::反转字符串 设定变量str=要翻转的字符
set i=0
:afzstr
if "!str:~%i%,1!" neq "" set /a i+=1&set stxt[%i%]=!str:~%i%,1!&goto :afzstr
for /l %%i in (0,1,!i!) do set r=!stxt[%%i]!!r!
for /l %%i in (0,1,!i!) do set stxt[%%i]=
set i=&set str=
set return=!r!
set r=
exit/b
:lostr
::取字符串长度 设定变量str=要去长度的字符
set i=0
:alostr
if "!str:~%i%,1!" neq "" set /a i+=1&goto :alostr
set return=!i!
set i=&set str=
exit/b
:fgstr
::分割字符串 设定变量str=分割的字符 fg=用于分割的字符 save=储存结果的变量
set r=&set c=1&set i=0
:afgstr
if "!str:~%i%,1!" neq "" set /a i+=1&if /i "!str:~%i%,1!" neq "!fg!" (set r=!r!!str:~%i%,1!&goto :afgstr ) else (set !save![!c!]=!r!&set/a c+=1&set r=&goto :afgstr )
set !save![!c!]=!r!
set i=&set str=&set r=&set c=&set fg=&set save=
exit/b
:txtolend
===================================
==============例子==============
@echo off&@setlocal EnableDelayedExpansion
set "str=a|b|c"&set "fg=|"&set save=yx
call :fgstr
echo !yx[1]!
pause
================================
当然,不能直接使用,还要从编译器过一遍
==============编译器==============
for /f "delims=" %%i in (%~fs1) do echo %%i>>%~fs2
for /f "delims=" %%i in (txtol.bat) do echo %%i>>%~fs2
==================================
总使用流程如下
写好bat
执行:
编译器.bat [预编译的bat] [编译后保存到的bat]
关于bat库化
就是上面的库,只不过编译器升级下,可执行bat中一些伪代码
关于编译器及伪代码构成的bat ,就叫做bat+吧
@tmxk0411
@超人硬汉
申精
如果不能加精也至少请重开一个精且置顶的帖子来说明bat+