Advertisement
T3RRYT3RR0R

String Reverse macro

Nov 30th, 2022 (edited)
1,520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.11 KB | Source Code | 0 0
  1. @echo off
  2.  
  3. REM Demo variables
  4.     Set "$Example=/?! ^&f><oo%%:.^|bar ^ ""` &^^ | *((:~=!)^^ =%%^^^ & If ""==" -"
  5.     Set "$Empty="
  6.  
  7. REM requires calling environment to NOT have EnableDelayedExpanion active.
  8.     If "!!" == "" Exit /B 1
  9.  
  10. (Set \n=^^^
  11.  
  12. %= Newline var \n for multi-line macro definition - Do not modify. =%)
  13.  
  14. REM supports all ASCII printable characters in range 32 ~ 126
  15. REM NOTE: CR & LF are not printable characters.
  16.  
  17. Set Reverse=For %%n in (1 2)Do if %%n==2 (%\n: String Reverse Macro by T3RRY =%
  18.     For /F "tokens=1,2 Delims=, " %%E in ("!Reverse_Args!")Do (%\n: Prep string for Parsing =%
  19.         Set "TempString=!%%~E!"%\n%
  20.         If Defined TempString (%\n%
  21.             Set ^^^"TempString=!TempString:"=``'``!"%\n%
  22.             Set "TempString=!TempString:^=^^!"%\n%
  23.             Set "TempString=!TempString:&=^&!"%\n%
  24.             Set "TempString=!TempString:|=^|!"%\n%
  25.             Set "TempString=!TempString:<=^<!"%\n%
  26.             Set "TempString=!TempString:>=^>!"%\n%
  27.             Set "TempString=!TempString:^=^^^!"%\n%
  28.             Set "NewString="%\n%
  29.             Set "Pos[#]=0"%\n: Split string by character and rebuild; handle detection and escaping of poison characters '!' '^' and '"' =%
  30.             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%
  31.                 Set "Char="%\n%
  32.                 If "^%%~G" == "^^" (%\n: Character is a Caret =%
  33.                     Set "Char=^"%\n%
  34.                 )Else (%\n%
  35.                     Set "Char="%\n%
  36.                     If "^^^%%~G" == "^^^!" (%\n: Character is an Exclamation mark =%
  37.                         Set "Char=^^^%%~G"%\n%
  38.                     ) Else (%\n%
  39.                         Set Char=^^%%~G%\n%
  40.                     )%\n%
  41.                 )%\n%
  42.                 Set "NewString=!Char!!NewString!"%\n%
  43.             )%\n%
  44.         )%!!%
  45.         Set "NewString=!NewString:^^^=^^!"%\n%
  46.         Set "NewString=!NewString:^^={TwoCarets}!"%\n%
  47.         Set "NewString=!NewString:&^^=&^!"%\n%
  48.         Set "NewString=!NewString:|^^=|^!"%\n%
  49.         Set "NewString=!NewString:<^^=<^!"%\n%
  50.         Set "%%~F=!NewString:>^^=>^!"%\n%
  51.         Set "NewString=!NewString:^=!"%\n%
  52.         Set "NewString=!NewString:{TwoCarets}=^!"%\n%
  53.         Set ^^^"NewString=!NewString:``'``="!"%\n%
  54.         Set "Return=$Return"%\n%
  55.         If Defined TempString (%\n%
  56.             Set "Return=%%F"%\n%
  57.         )Else Set "NewString="%\n%
  58.     )%!! =%
  59.     For /f "tokens=1* Delims=`" %%R in ("!Return!`!NewString!")Do (%\n%
  60.         Endlocal ^& If /I not "%%R" == "Reverse" Set "%%R=%%S"%\n%
  61.     )%\n%
  62. )Else Setlocal EnableDelayedExpansion ^& Set Reverse_Args=
  63.  
  64. REM Call this script with any argument to define the macro
  65. REM -- Errorlevel 1: Script Called with DE enabled; Macro not defined
  66. REM -- Errorlevel 0: Macro succesfully defined
  67.  
  68.     If not "%~1" == "" Exit /b 0
  69.     CLS
  70.  
  71. Rem Examples
  72.  
  73. REM demonstrate macro works for any string comprised of ASCII printable characters regardless of presence of escape characters.
  74.     %Reverse% $Example $Result1
  75.  
  76. REM macro will not overide it's own definition
  77.     %Reverse% $Example Reverse
  78.  
  79. REM Proves above demostration true.
  80.     %Reverse% $Result1 $Result2
  81.  
  82. REM macro will not return a result for an undefined variable
  83.     %Reverse% $Empty $Result0
  84.  
  85.     Set $
  86.  
  87. Goto:Eof
  88.  
Tags: batch
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement