Skip to content

Instantly share code, notes, and snippets.

@breezhang
Created May 19, 2014 13:15
Show Gist options
  • Save breezhang/029d6deae66f4b0852c1 to your computer and use it in GitHub Desktop.
Save breezhang/029d6deae66f4b0852c1 to your computer and use it in GitHub Desktop.
MS cmd make password
cmd random http://jasonfaulkner.com/RandomChars.aspx
1.
RandomChars 10
2.
RandomChars 15 /R 36 /O 10
3.
RandomChars /G
4.
FOR /F "usebackq tokens=*" %%A IN (`CALL RandomChars 12`) DO SET NewPassword=%%A
ECHO Randomly Generated Password: %NewPassword%
@ECHO OFF
IF NOT "%~1" == "/?" GOTO Main
ECHO Random Chars [v1.2]
ECHO Generates a string of random text characters.
ECHO Copyright (c) 2012-2013, Jason Faulkner - All rights reserved.
ECHO.
ECHO %~n0 {Length [/R Range] [/O Offset] ^| /G}
ECHO.
ECHO Length Length of the string to generate.
ECHO /G Generate a random GUID (00000000-0000-0000-0000-000000000000).
ECHO /R Range Define the range of available characters used for generation.
ECHO The range should be a number between 1 and 62.
ECHO 10 = Numbers 0-9.
ECHO 36 = Upper case letters A-Z + all previous characters.
ECHO 62 = (Default) Lower case letters a-z + all previous characters.
ECHO /O Offset Define the lower range offset for character generation.
ECHO The offset must be lower than the range (/R) value.
ECHO For example, range 62 with offset 10 will produce characters
ECHO between 10 and 62 only.
ECHO.
ECHO __________
ECHO Visit my website for additional information, examples and updates.
ECHO http://jasonfaulkner.com
GOTO :EOF
:Main
SETLOCAL EnableExtensions EnableDelayedExpansion
CALL :Initialize
CALL :Configuration %*
IF /I %ERRORLEVEL% GTR 0 GOTO Finish
CALL :PrepSettings
IF /I %ERRORLEVEL% GTR 0 GOTO Finish
SET GoTo=Generate
IF "%IsGuid%" == "1" SET GoTo=Guid
CALL :%GoTo%
SET Value=%Value:~1%
ECHO %Value%
:Finish
ENDLOCAL
GOTO :EOF
:Guid
FOR /F "usebackq tokens=*" %%A IN (`CALL RandomChars 32 /R 16`) DO SET Guid=%%A
REM Format = 00000000-0000-0000-0000-000000000000
SET Value=%Value%%Guid:~0,8%-%Guid:~8,4%-%Guid:~12,4%-%Guid:~16,4%-%Guid:~20,12%
GOTO :EOF
:Generate
IF /I %Range% GTR 62 SET Range=62
IF /I %Range% LEQ 0 SET Range=62
:AddChar
CALL SET LengthCheck=%%Value:~%Length%,1%%
IF NOT "%LengthCheck%" == "" GOTO :EOF
IF "%Char%" == "" SET Char=0
SET /A Char=((%RANDOM% + %Char%) %% %Range%) + %Offset%
IF /I %Char% LEQ 9 (
SET Value=%Value%%Char%
) ELSE (
IF %Char% == 10 SET Value=%Value%A
IF %Char% == 11 SET Value=%Value%B
IF %Char% == 12 SET Value=%Value%C
IF %Char% == 13 SET Value=%Value%D
IF %Char% == 14 SET Value=%Value%E
IF %Char% == 15 SET Value=%Value%F
IF %Char% == 16 SET Value=%Value%G
IF %Char% == 17 SET Value=%Value%H
IF %Char% == 18 SET Value=%Value%I
IF %Char% == 19 SET Value=%Value%J
IF %Char% == 20 SET Value=%Value%K
IF %Char% == 21 SET Value=%Value%L
IF %Char% == 22 SET Value=%Value%M
IF %Char% == 23 SET Value=%Value%N
IF %Char% == 24 SET Value=%Value%O
IF %Char% == 25 SET Value=%Value%P
IF %Char% == 26 SET Value=%Value%Q
IF %Char% == 27 SET Value=%Value%R
IF %Char% == 28 SET Value=%Value%S
IF %Char% == 29 SET Value=%Value%T
IF %Char% == 30 SET Value=%Value%U
IF %Char% == 31 SET Value=%Value%V
IF %Char% == 32 SET Value=%Value%W
IF %Char% == 33 SET Value=%Value%Z
IF %Char% == 34 SET Value=%Value%Y
IF %Char% == 35 SET Value=%Value%Z
IF %Char% == 36 SET Value=%Value%a
IF %Char% == 37 SET Value=%Value%b
IF %Char% == 38 SET Value=%Value%c
IF %Char% == 39 SET Value=%Value%d
IF %Char% == 40 SET Value=%Value%e
IF %Char% == 41 SET Value=%Value%f
IF %Char% == 42 SET Value=%Value%g
IF %Char% == 43 SET Value=%Value%h
IF %Char% == 44 SET Value=%Value%i
IF %Char% == 45 SET Value=%Value%j
IF %Char% == 46 SET Value=%Value%k
IF %Char% == 47 SET Value=%Value%l
IF %Char% == 48 SET Value=%Value%m
IF %Char% == 49 SET Value=%Value%n
IF %Char% == 50 SET Value=%Value%o
IF %Char% == 51 SET Value=%Value%p
IF %Char% == 52 SET Value=%Value%q
IF %Char% == 53 SET Value=%Value%r
IF %Char% == 54 SET Value=%Value%s
IF %Char% == 55 SET Value=%Value%t
IF %Char% == 56 SET Value=%Value%u
IF %Char% == 57 SET Value=%Value%v
IF %Char% == 58 SET Value=%Value%w
IF %Char% == 59 SET Value=%Value%x
IF %Char% == 60 SET Value=%Value%y
IF %Char% == 61 SET Value=%Value%z
)
GOTO AddChar
:Initialize
SET Length=0
SET Range=62
SET Offset=0
SET IsGuid=0
SET Value=_
GOTO :EOF
:Configuration
IF "%~1" == "" GOTO InvalidParams
REM Check for GUID option.
IF /I "%~1" == "/G" (
SET IsGuid=1
GOTO :EOF
)
REM Param must be the length.
SET Length=%~1
SHIFT /1
:Params
IF "%~1" == "" GOTO :EOF
REM Check for optional params.
IF /I "%~1" == "/R" SET Range=%~2
IF /I "%~1" == "/O" SET Offset=%~2
SHIFT /1
SHIFT /1
GOTO :Params
:PrepSettings
REM No need to validate GUID's.
IF "%IsGuid%" == "1" GOTO :EOF
REM Validate length supplied is a number.
IF /I %Length% GEQ A GOTO InvalidParams
IF /I %Length% LEQ 0 GOTO InvalidParams
REM Validate range and offsets are numbers.
IF /I %Range% GEQ A GOTO InvalidParams
IF /I %Range% LEQ 0 GOTO InvalidParams
IF /I %Offset% GEQ A GOTO InvalidParams
IF /I %Offset% LSS 0 GOTO InvalidParams
REM Redefine range according to the offset.
SET /A Range=%Range% - %Offset%
REM Validate range is greater than offset.
IF /I %Range% LEQ 0 GOTO InvalidParams
GOTO :EOF
:InvalidParams
ECHO Invalid parameters. Use /? to view the help information.
EXIT /B 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment