1. 求字符串的长度
REM 文件名:Length.bat
REM 调用此批处理的文件有:
REM 1.Reverse.bat
@echo off
setlocal
REM 设置环境变量延迟
setlocal enabledelayedexpansion
REM 命令行下运行的主要语句
REM set mystr=abcdefgh
REM set MAX=10
REM for /L %a in (0,1,%MAX%) do @for /f %A in ('echo ^|echo %mystr:~^%a^,1%') do @echo %A
REM 在批处理文件中的形式如下,注意与命令行下的细微区别
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:PREP
if "%~1" =="" (
goto USAGE
) else (
set mystr=%~1
goto DEAL
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:USAGE
echo 得到字符串长度,请不要包含^^,^&特殊字符
echo 1. 调用格式:Length.bat "mystring"
echo 2. 可继续按任意键输入字符串。
echo.&pause>nul
goto INPUT
:INPUT
set /p mystr=请输入字符串(无引号):
goto DEAL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DEAL
REM 设置字符串最大检查长度
set MAX=100
set NUM=0
for /L %%a in (0,1,%MAX%) do @if NOT "%mystr%"=="" (
set NUM=%%a
REM echo !NUM!
for /f %%A in ('echo ^|echo %%mystr:~^%%a^,2%%') do @if "%%A"=="ECHO" goto QUIT
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:QUIT
echo %NUM%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
endlocal
2. 字符串反转
REM 文件名:Length.bat
REM 此文件调用的批处理有:
REM 1.Length.bat
@echo off
setlocal
setlocal enableDELayedexpansion
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:PREP
if "%~1" =="" (
goto USAGE
) else (
set mystr=%~1
goto DEAL
)
:USAGE
echo 字符串反转,请不要包含^^,^&特殊字符
echo 1. 调用格式:Reverse.bat "mystring"
echo 2. 请继续按任意键输入字符串。
echo.&pause>nul
goto INPUT
:INPUT
set /p mystr=请输入字符串(无引号):
goto DEAL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DEAL
if EXIST MYNUM_TMP ( DEL /f /q MYNUM_TMP )
call Length.bat "%mystr%" >MYNUM_TMP
set /p NUM=<MYNUM_TMP
DEL /F /Q MYNUM_TMP
REM echo %NUM%
if EXIST MYCHARS_TMP ( DEL /f /q MYCHARS_TMP )
for /L %%a in (1,1,%NUM%) do @if NOT "%mystr%"=="" (
echo |echo %%mystr:~-^%%a^,1%%# >>MYCHARS_TMP
)
set CHS=#
for /f %%A in ( MYCHARS_TMP ) do @if EXIST MYCHARS_TMP (
if "%%A"=="#" (
set CHS=!CHS!
) else (
set SIMP_CHAR=%%A
set CHS=!CHS!!SIMP_CHAR:~0,1!
)
)
DEL /F /Q MYCHARS_TMP
goto QUIT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:QUIT
echo %CHS:~1%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
endlocal
刚写完本文时看到了一篇相似的博客,对命令行下字符串操作进行了详细描述,非常好,在此贴出其字符串反转的函数部分:
REM http://my.oschina.net/honzel/blog/185663
REM 原文无法直接运行,于是进行了小改动
@echo off
setlocal enableDELayedexpansion
set t1=%~1
set returnValue=%t1:~-1%
set t1=%t1:~0,-1%
:INNERREVERSE
set t2=!t1:~-1!&&set t1=!t1:~0,-1!
set returnValue=!returnValue!!t2!
if not "%t1%"=="" goto INNERREVERSE
echo %returnValue%