Created
May 19, 2014 13:15
-
-
Save breezhang/029d6deae66f4b0852c1 to your computer and use it in GitHub Desktop.
MS cmd make password
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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