@ECHO OFF
::以下这句考虑到可能会在别的批处理中调用所以来判断是否已经启用了延缓
IF NOT "%CD%" == "!CD!" SETLOCAL ENABLEDELAYEDEXPANSION
::因为%1-%9的识别特性(有第九个就一定会有第八个)来得到参数的个数
IF NOT [%9] == [] SET /A PVAR+=1
IF NOT [%8] == [] SET /A PVAR+=1
IF NOT [%7] == [] SET /A PVAR+=1
IF NOT [%6] == [] SET /A PVAR+=1
IF NOT [%5] == [] SET /A PVAR+=1
IF NOT [%4] == [] SET /A PVAR+=1
IF NOT [%3] == [] SET /A PVAR+=1
IF NOT [%2] == [] SET /A PVAR+=1
IF NOT [%1] == [] SET /A PVAR+=1
::若没有参数则转向
IF [%PVAR%] == [] GOTO README
:start
::这一小节依大到小来CALL参数来执行
ECHO.
::假设只有一个参数(%1=HT ff),那么这一行转换过来就是CALL :HT ff 2>nul(CALL :%%1~1 2>nul),采用这种方法主要是为了将参数%1在CALL :HT时延续内部参数ff
CALL :%%^~!PVAR! 2>nul
::每执行完一个就减1
SET /A PVAR-=1
::执行完退出
IF NOT %PVAR% LEQ 0 (GOTO :START) ELSE GOTO :EOF
:readme
::这一节纯粹是好玩,类似CMD下的命令帮助
ECHO.
ECHO EXPANDING TOOLS FOR CMD.EXE [Windows XP SP2]
ECHO.
ECHO usage:
ECHO %~nx0 "command1 options" "command2 ...... "command9 option1 .... option9"
ECHO.
ECHO command:
FOR /F "delims=:" %%i IN ('FINDSTR /R "^[:][A-Z]*[A-Z]$" %0') DO ECHO %~nx0 "%%i options"
ECHO.
ECHO syntax examples
ECHO %~nx0 "HT ff fe fd fc fb fa f0 f9 f8" "TH 999999" "LOS "123456""
ECHO -...
pause>nul
GOTO :EOF
::以下是我随意添加的一些脚本,你可以将自已常用的加进去
:HT
::这一节是16进制转为10进制
SET /A VAR1=0x00%1,VAR2=0x00%2,VAR3=0x00%3,VAR4=0x00%4,VAR5=0x00%5,VAR6=0x00%6,VAR7=0x00%7,VAR8=0x00%8,VAR9=0x00%9
FOR /L %%i IN (1,1,9) DO SET /p=!VAR%%i! <nul
ECHO ^<^<=%0
GOTO :EOF
:TH
::这一节是十进制转16进制
IF %1 GTR 2099999999 (GOTO :EOF)
SET VAR=0123456789ABCDEF
FOR /L %%i IN (0,1,15) DO (
SET H%%i=!VAR:~%%i,1!)
SET HH=1&SET KK=0&SET TT=%1
:th1
SET /A HV%HH%=%TT%/16,HV%KK%=%TT%%%16
IF !HV%HH%! GTR 16 (SET TT=HV%HH%&&SET /A HH+=1,KK+=1&&GOTO TH1)
SET VAR1=0x00!H%HV9%!!H%HV8%!!H%HV7%!!H%HV6%!!H%HV5%!!H%HV4%!!H%HV3%!!H%HV2%!!H%HV1%!!H%HV0%!
ECHO %VAR1% ^<^<=%0
GOTO :EOF
:LOS
::得到字符串长度
SET STR=%1&SET VAR1=0
SET STR=%STR:"=X%
:los1
IF NOT "!STR:~%VAR1%,1!" == "" SET /A VAR1=%VAR1%+1&&GOTO LOS1
ECHO %0 == %VAR1%
GOTO :EOF