批处理能写带参数的命令行程序吗?

2024-12-21 11:32:57
推荐回答(1个)
回答1:

能。比如这个:

@echo off
setlocal enabledelayedexpansion
if "%~1" == "/?" goto usage
set d_len=10
set d_StrList=abcdefghijklmnopqrstuvwxyz0123456789
if "%~1" == "" (set len=%d_len%) else (set "len=%~1")
if "%len:-=%" neq "%len%" (
        for /f "tokens=1,2 delims=- " %%a in ("%len%") do (
                set /a min_len = %%a, max_len = %%b
                set /a "len = %random% %% (max_len-min_len+1) + min_len"
        )
)
if "%~2" == "" (
        set StrList=%d_StrList%
) else (
        set "StrList=%~2"
        rem 替换正则
        set StrList=!StrList:\d=0123456789!
        set StrList=!StrList:[0-9]=0123456789!
        set StrList=!StrList:[a-z]=abcdefghijklmnopqrstuvwxyz!
        set StrList=!StrList:[a-zA-Z]=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!
)
call :StrLen "%StrList%"
set _out=
for /l %%n in (1 1 %len%) do (
        set /a pos = !random! %% StrLen
        for %%p in (!pos!) do set _out=!_out!!StrList:~%%p,1!
)
echo,!_out!
exit /b
:StrLen 
set "_StrList=%~1"
set StrLen=1
for %%a in (2048 1024 512 256 128 64 32 16) do (
        if "!_StrList:~%%a!" neq "" (
                set /a StrLen += %%a
                set _StrList=!_StrList:~%%a!
        )
)
set _StrList=!_StrList!fedcba9876543210
set /a StrLen += 0x!_StrList:~16,1!
goto :eof
:usage
echo %~nx0 --- 生成随机字符串
echo,
echo 用法: %~n0 [字符个数 ^| 最小字符个数-最大字符个数] [字符串]
echo         [字符个数]        默认值: 10
echo         [字符串]        默认值: abcdefghijklmnopqrstuvwxyz0123456789
echo                         可以使用四个正则: \d [0-9] [a-z] [a-zA-Z]
echo,
echo 示例: %~n0
echo       %~n0 10
echo       %~n0 10-15
echo       %~n0 10 "0123&abc"
echo       %~n0 "" \d@-_

转发自批处理之家。作者:tmplinshi

它可以当成第三方工具来使用。