Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- REM Demo variables
- Set "$Example=/?! ^&f><oo%%:.^|bar ^ ""` &^^ | *((:~=!)^^ =%%^^^ & If ""==" -"
- Set "$Empty="
- REM requires calling environment to NOT have EnableDelayedExpanion active.
- If "!!" == "" Exit /B 1
- (Set \n=^^^
- %= Newline var \n for multi-line macro definition - Do not modify. =%)
- REM supports all ASCII printable characters in range 32 ~ 126
- REM NOTE: CR & LF are not printable characters.
- Set Reverse=For %%n in (1 2)Do if %%n==2 (%\n: String Reverse Macro by T3RRY =%
- For /F "tokens=1,2 Delims=, " %%E in ("!Reverse_Args!")Do (%\n: Prep string for Parsing =%
- Set "TempString=!%%~E!"%\n%
- If Defined TempString (%\n%
- Set ^^^"TempString=!TempString:"=``'``!"%\n%
- Set "TempString=!TempString:^=^^!"%\n%
- Set "TempString=!TempString:&=^&!"%\n%
- Set "TempString=!TempString:|=^|!"%\n%
- Set "TempString=!TempString:<=^<!"%\n%
- Set "TempString=!TempString:>=^>!"%\n%
- Set "TempString=!TempString:^=^^^!"%\n%
- Set "NewString="%\n%
- Set "Pos[#]=0"%\n: Split string by character and rebuild; handle detection and escaping of poison characters '!' '^' and '"' =%
- For /f "usebackq Delims=" %%G in (`%Systemroot%\System32\cmd.exe /u /c ^"Echo(!TempString!^"^^^|%Systemroot%\System32\find.exe /v "[false_match_%~n0]"^^^|%Systemroot%\System32\findstr.exe "^^"`)Do (%\n%
- Set "Char="%\n%
- If "^%%~G" == "^^" (%\n: Character is a Caret =%
- Set "Char=^"%\n%
- )Else (%\n%
- Set "Char="%\n%
- If "^^^%%~G" == "^^^!" (%\n: Character is an Exclamation mark =%
- Set "Char=^^^%%~G"%\n%
- ) Else (%\n%
- Set Char=^^%%~G%\n%
- )%\n%
- )%\n%
- Set "NewString=!Char!!NewString!"%\n%
- )%\n%
- )%!!%
- Set "NewString=!NewString:^^^=^^!"%\n%
- Set "NewString=!NewString:^^={TwoCarets}!"%\n%
- Set "NewString=!NewString:&^^=&^!"%\n%
- Set "NewString=!NewString:|^^=|^!"%\n%
- Set "NewString=!NewString:<^^=<^!"%\n%
- Set "%%~F=!NewString:>^^=>^!"%\n%
- Set "NewString=!NewString:^=!"%\n%
- Set "NewString=!NewString:{TwoCarets}=^!"%\n%
- Set ^^^"NewString=!NewString:``'``="!"%\n%
- Set "Return=$Return"%\n%
- If Defined TempString (%\n%
- Set "Return=%%F"%\n%
- )Else Set "NewString="%\n%
- )%!! =%
- For /f "tokens=1* Delims=`" %%R in ("!Return!`!NewString!")Do (%\n%
- Endlocal ^& If /I not "%%R" == "Reverse" Set "%%R=%%S"%\n%
- )%\n%
- )Else Setlocal EnableDelayedExpansion ^& Set Reverse_Args=
- REM Call this script with any argument to define the macro
- REM -- Errorlevel 1: Script Called with DE enabled; Macro not defined
- REM -- Errorlevel 0: Macro succesfully defined
- If not "%~1" == "" Exit /b 0
- CLS
- Rem Examples
- REM demonstrate macro works for any string comprised of ASCII printable characters regardless of presence of escape characters.
- %Reverse% $Example $Result1
- REM macro will not overide it's own definition
- %Reverse% $Example Reverse
- REM Proves above demostration true.
- %Reverse% $Result1 $Result2
- REM macro will not return a result for an undefined variable
- %Reverse% $Empty $Result0
- Set $
- Goto:Eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement