命令行的字符串操作

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%



转载于:https://my.oschina.net/wqli/blog/299608

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值