[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] rstr.bat --- 生成随机字符串

本帖最后由 tmplinshi 于 2013-9-27 23:29 编辑

e:\我的文档\桌面>rstr /?
rstr.bat --- 生成随机字符串

用法: rstr [字符个数 | 最小字符个数-最大字符个数] [字符串]
        [字符个数]      默认值: 10
        [字符串]        默认值: abcdefghijklmnopqrstuvwxyz0123456789
                        可以使用四个正则: \d [0-9] [a-z] [a-zA-Z]

示例: rstr
      rstr 10
      rstr 10-15
      rstr 10 "0123&abc"
      rstr "" \d@-_


e:\我的文档\桌面>rstr
ta946ou122

e:\我的文档\桌面>rstr 3
3zv

e:\我的文档\桌面>rstr 3 \d
646
  1. :: rstr.bat --- 生成随机字符串
  2. :: v1.00 / 2013-6-12 / tmplinshi
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. if "%~1" == "/?" goto usage
  6. :: ------------------- 默认值 -------------------
  7. set d_len=10
  8. set d_StrList=abcdefghijklmnopqrstuvwxyz0123456789
  9. :: ----------------------------------------------
  10. :: =================
  11. :: 生成随机字符串
  12. :: =================
  13. ::
  14. rem ############## 获取字符个数
  15. if "%~1" == "" (set len=%d_len%) else (set "len=%~1")
  16. rem 随机“最小字符个数-最大字符个数”
  17. if "%len:-=%" neq "%len%" (
  18.         for /f "tokens=1,2 delims=- " %%a in ("%len%") do (
  19.                 set /a min_len = %%a, max_len = %%b
  20.                 set /a "len = %random% %% (max_len-min_len+1) + min_len"
  21.         )
  22. )
  23. rem ############## 获取字符串
  24. if "%~2" == "" (
  25.         set StrList=%d_StrList%
  26. ) else (
  27.         set "StrList=%~2"
  28.         rem 替换正则
  29.         set StrList=!StrList:\d=0123456789!
  30.         set StrList=!StrList:[0-9]=0123456789!
  31.         set StrList=!StrList:[a-z]=abcdefghijklmnopqrstuvwxyz!
  32.         set StrList=!StrList:[a-zA-Z]=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!
  33. )
  34. rem ############## 计算字符串长度
  35. call :StrLen "%StrList%"
  36. rem ############## 生成随机字符串
  37. set _out=
  38. for /l %%n in (1 1 %len%) do (
  39.         set /a pos = !random! %% StrLen
  40.         for %%p in (!pos!) do set _out=!_out!!StrList:~%%p,1!
  41. )
  42. rem ############## 输出结果
  43. echo,!_out!
  44. exit /b
  45. :: =================
  46. :: 计算字符串长度
  47. :: =================
  48. ::
  49. :StrLen <string>
  50. set "_StrList=%~1"
  51. set StrLen=1
  52. for %%a in (2048 1024 512 256 128 64 32 16) do (
  53.         if "!_StrList:~%%a!" neq "" (
  54.                 set /a StrLen += %%a
  55.                 set _StrList=!_StrList:~%%a!
  56.         )
  57. )
  58. set _StrList=!_StrList!fedcba9876543210
  59. set /a StrLen += 0x!_StrList:~16,1!
  60. goto :eof
  61. :: =================
  62. :: 显示帮助
  63. :: =================
  64. ::
  65. :usage
  66. echo %~nx0 --- 生成随机字符串
  67. echo,
  68. echo 用法: %~n0 [字符个数 ^| 最小字符个数-最大字符个数] [字符串]
  69. echo         [字符个数]        默认值: 10
  70. echo         [字符串]        默认值: abcdefghijklmnopqrstuvwxyz0123456789
  71. echo                         可以使用四个正则: \d [0-9] [a-z] [a-zA-Z]
  72. echo,
  73. echo 示例: %~n0
  74. echo       %~n0 10
  75. echo       %~n0 10-15
  76. echo       %~n0 10 "0123&abc"
  77. echo       %~n0 "" \d@-_
复制代码
1

评分人数

    • 523066680: Thanks for sharing.PB + 12 技术 + 5

rstr.exe  这个哪里有下载的呢? 跪求。我这边都删除了。好多外部命令都不见了~
mikezunya 发表于 2013-8-8 15:31



是 bat,不是 exe。把顶楼的代码保存为 rstr.bat。

TOP

回复 6# weichenxiehou


谢谢补充

TOP

返回列表