Advertisement
Guest User

Untitled

a guest
Jun 13th, 2023
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 42.03 KB | None | 0 0
  1.  
  2. @echo off
  3. :setup
  4. REM call :ClearLocalVariables
  5. REM Call :GetTime FileTime StartDate StartTime
  6. REM Call :GetCodePage InitialCodepage
  7. REM Call :SetTitle "Control 'This PC' icon on the desktop"
  8. REM set debug=false
  9. REM set verbose=100
  10. REM set silent=false
  11. REM set logfile=%tmp%\%filetime%
  12. REM if "[debug]"=="[true]" Call :PrintTime
  13. :: Uncomment line below if this scripts needs to run with admin privileges
  14. REM call :IsAdmin || set args=%* && (call :ElevateAndWait & exit /b)
  15.  
  16. :macro
  17. REM call :SetMacroPrintTime
  18.  
  19. :main
  20.  
  21. cls
  22.  
  23.  
  24. call :ListUnescapedSpecialCharactersInString-DEMO
  25. REM call :ListSpecialCharactersInString-DEMO
  26. REM call :ElseIF-DEMO
  27. REM call :IsArrayDefinedBySet-DEMO
  28. REM call :GetArrayParameters-DEMO
  29.  
  30.  
  31.  
  32.  
  33. GoTo :END
  34.  
  35. :end
  36. set FileTime=
  37. set StartDate=
  38. set StartTime=
  39. set InitialCodepage=
  40. set debug=
  41. set verbose=
  42. set silent=
  43. set logfile=
  44.  
  45. GoTo :EOF
  46. REM Exit /b %returnvalue%
  47.  
  48.  
  49. :ListUnescapedSpecialCharactersInString-DEMO
  50.  
  51. REM goto :ListUnescapedSpecialCharactersInString-DEMO-1
  52. REM goto :ListUnescapedSpecialCharactersInString-DEMO-2
  53. REM goto :ListUnescapedSpecialCharactersInString-DEMO-3
  54.  
  55. echo.
  56. set "_mystring=a%bcdef"
  57. set _mystring
  58. Call :ListUnescapedSpecialCharactersInString _mystring
  59.  
  60. echo.
  61. set "_mystring=ab%%cdef"
  62. set _mystring
  63. Call :ListUnescapedSpecialCharactersInString _mystring
  64.  
  65. echo.
  66. set _mystring=abc%%def
  67. set _mystring
  68. Call :ListUnescapedSpecialCharactersInString _mystring
  69.  
  70. echo.
  71. set "_mystring=abcd"ef"
  72. set _mystring
  73. Call :ListUnescapedSpecialCharactersInString _mystring
  74.  
  75. echo.
  76. set _mystring=abcde"f
  77. set _mystring
  78. Call :ListUnescapedSpecialCharactersInString _mystring
  79.  
  80. echo.
  81. set "_mystring=abcd&ef"
  82. set _mystring
  83. Call :ListUnescapedSpecialCharactersInString _mystring
  84.  
  85. echo.
  86. set _mystring=abc^&def
  87. set _mystring
  88. Call :ListUnescapedSpecialCharactersInString _mystring
  89.  
  90. echo.
  91. set "_mystring=ab<cdef"
  92. set _mystring
  93. Call :ListUnescapedSpecialCharactersInString _mystring
  94.  
  95. echo.
  96. set _mystring=a^<bcdef
  97. set _mystring
  98. Call :ListUnescapedSpecialCharactersInString _mystring
  99.  
  100. echo.
  101. set "_mystring=ab>cdef"
  102. set _mystring
  103. Call :ListUnescapedSpecialCharactersInString _mystring
  104.  
  105. echo.
  106. set _mystring=abc^>def
  107. set _mystring
  108. Call :ListUnescapedSpecialCharactersInString _mystring
  109.  
  110. echo.
  111. set "_mystring=abcd|ef"
  112. set _mystring
  113. Call :ListUnescapedSpecialCharactersInString _mystring
  114.  
  115. echo.
  116. set _mystring=abcde^|f
  117. set _mystring
  118. Call :ListUnescapedSpecialCharactersInString _mystring
  119.  
  120. echo.
  121. echo Same as previous, but with added escape characters as needed so satify "properly escaped" status
  122.  
  123. Call :ClearVariablesByPrefix IndexOfSpecialChar
  124.  
  125. echo.
  126. set "_mystring=a%bcdef"
  127. set _mystring
  128. Call :ListUnescapedSpecialCharactersInString _mystring
  129.  
  130. echo.
  131. set "_mystring=ab%%%%cdef"
  132. set _mystring
  133. Call :ListUnescapedSpecialCharactersInString _mystring
  134.  
  135. echo.
  136. set _mystring=abc%%%%def
  137. set _mystring
  138. Call :ListUnescapedSpecialCharactersInString _mystring
  139.  
  140. echo.
  141. set "_mystring=abcd^"ef"
  142. set _mystring
  143. Call :ListUnescapedSpecialCharactersInString _mystring
  144.  
  145. echo.
  146. set _mystring=abcde^^"f
  147. set _mystring
  148. Call :ListUnescapedSpecialCharactersInString _mystring
  149.  
  150. echo.
  151. set "_mystring=abcd^&ef"
  152. set _mystring
  153. Call :ListUnescapedSpecialCharactersInString _mystring
  154.  
  155. echo.
  156. set _mystring=abc^^^&def
  157. set _mystring
  158. Call :ListUnescapedSpecialCharactersInString _mystring
  159.  
  160. echo.
  161. set "_mystring=ab^<cdef"
  162. set _mystring
  163. Call :ListUnescapedSpecialCharactersInString _mystring
  164.  
  165. echo.
  166. set _mystring=a^^^<bcdef
  167. set _mystring
  168. Call :ListUnescapedSpecialCharactersInString _mystring
  169.  
  170. echo.
  171. set "_mystring=ab^>cdef"
  172. set _mystring
  173. Call :ListUnescapedSpecialCharactersInString _mystring
  174.  
  175. echo.
  176. set _mystring=abc^^^>def
  177. set _mystring
  178. Call :ListUnescapedSpecialCharactersInString _mystring
  179.  
  180. echo.
  181. set "_mystring=abcd^|ef"
  182. set _mystring
  183. Call :ListUnescapedSpecialCharactersInString _mystring
  184.  
  185. echo.
  186. set _mystring=abcde^^^|f
  187. set _mystring
  188. Call :ListUnescapedSpecialCharactersInString _mystring
  189.  
  190.  
  191. :ListUnescapedSpecialCharactersInString-DEMO-1
  192.  
  193. echo.
  194. echo Output in array form of all unescaped special character
  195.  
  196. Call :ClearVariablesByPrefix IndexOfSpecialChar
  197.  
  198. echo.
  199. set "_mystring=a%bcdef"
  200. set _mystring
  201. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  202. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  203. Call :ClearVariablesByPrefix IndexOfSpecialChar
  204.  
  205. echo.
  206. set "_mystring=ab%%cdef"
  207. set _mystring
  208. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  209. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  210. Call :ClearVariablesByPrefix IndexOfSpecialChar
  211.  
  212. echo.
  213. set _mystring=abc%%def
  214. set _mystring
  215. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  216. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  217. Call :ClearVariablesByPrefix IndexOfSpecialChar
  218.  
  219. echo.
  220. set "_mystring=abcd"ef"
  221. set _mystring
  222. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  223. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  224. Call :ClearVariablesByPrefix IndexOfSpecialChar
  225.  
  226. echo.
  227. set _mystring=abcde"f
  228. set _mystring
  229. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  230. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  231. Call :ClearVariablesByPrefix IndexOfSpecialChar
  232.  
  233. echo.
  234. set "_mystring=abcd&ef"
  235. set _mystring
  236. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  237. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  238. Call :ClearVariablesByPrefix IndexOfSpecialChar
  239.  
  240. echo.
  241. set _mystring=abc^&def
  242. set _mystring
  243. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  244. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  245. Call :ClearVariablesByPrefix IndexOfSpecialChar
  246.  
  247. echo.
  248. set "_mystring=ab<cdef"
  249. set _mystring
  250. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  251. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  252. Call :ClearVariablesByPrefix IndexOfSpecialChar
  253.  
  254. echo.
  255. set _mystring=a^<bcdef
  256. set _mystring
  257. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  258. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  259. Call :ClearVariablesByPrefix IndexOfSpecialChar
  260.  
  261. echo.
  262. set "_mystring=ab>cdef"
  263. set _mystring
  264. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  265. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  266. Call :ClearVariablesByPrefix IndexOfSpecialChar
  267.  
  268. echo.
  269. set _mystring=abc^>def
  270. set _mystring
  271. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  272. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  273. Call :ClearVariablesByPrefix IndexOfSpecialChar
  274.  
  275. echo.
  276. set "_mystring=abcd|ef"
  277. set _mystring
  278. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  279. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  280. Call :ClearVariablesByPrefix IndexOfSpecialChar
  281.  
  282. echo.
  283. set _mystring=abcde^|f
  284. set _mystring
  285. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  286. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  287. Call :ClearVariablesByPrefix IndexOfSpecialChar
  288.  
  289.  
  290. :ListUnescapedSpecialCharactersInString-DEMO-2
  291.  
  292.  
  293.  
  294. echo.
  295. echo Same as previous, but with added escape characters as needed so satify "properly escaped" status
  296.  
  297. Call :ClearVariablesByPrefix IndexOfSpecialChar
  298.  
  299. echo.
  300. set "_mystring=a%bcdef"
  301. set _mystring
  302. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  303. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  304. Call :ClearVariablesByPrefix IndexOfSpecialChar
  305.  
  306. echo.
  307. set "_mystring=ab%%%%cdef"
  308. set _mystring
  309. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  310. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  311. Call :ClearVariablesByPrefix IndexOfSpecialChar
  312.  
  313. echo.
  314. set _mystring=abc%%%%def
  315. set _mystring
  316. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  317. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  318. Call :ClearVariablesByPrefix IndexOfSpecialChar
  319.  
  320. echo.
  321. set "_mystring=abcd^"ef"
  322. set _mystring
  323. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  324. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  325. Call :ClearVariablesByPrefix IndexOfSpecialChar
  326.  
  327. echo.
  328. set _mystring=abcde^^"f
  329. set _mystring
  330. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  331. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  332. Call :ClearVariablesByPrefix IndexOfSpecialChar
  333.  
  334. echo.
  335. set "_mystring=abcd^&ef"
  336. set _mystring
  337. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  338. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  339. Call :ClearVariablesByPrefix IndexOfSpecialChar
  340.  
  341. echo.
  342. set _mystring=abc^^^&def
  343. set _mystring
  344. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  345. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  346. Call :ClearVariablesByPrefix IndexOfSpecialChar
  347.  
  348. echo.
  349. set "_mystring=ab^<cdef"
  350. set _mystring
  351. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  352. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  353. Call :ClearVariablesByPrefix IndexOfSpecialChar
  354.  
  355. echo.
  356. set _mystring=a^^^<bcdef
  357. set _mystring
  358. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  359. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  360. Call :ClearVariablesByPrefix IndexOfSpecialChar
  361.  
  362. echo.
  363. set "_mystring=ab^>cdef"
  364. set _mystring
  365. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  366. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  367. Call :ClearVariablesByPrefix IndexOfSpecialChar
  368.  
  369. echo.
  370. set _mystring=abc^^^>def
  371. set _mystring
  372. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  373. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  374. Call :ClearVariablesByPrefix IndexOfSpecialChar
  375.  
  376. echo.
  377. set "_mystring=abcd^|ef"
  378. set _mystring
  379. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  380. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  381. Call :ClearVariablesByPrefix IndexOfSpecialChar
  382.  
  383. echo.
  384. set _mystring=abcde^^^|f
  385. set _mystring
  386. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  387. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  388. Call :ClearVariablesByPrefix IndexOfSpecialChar
  389.  
  390.  
  391. echo.
  392. echo Same as previous, but with one escape carret too many on each line, excess adjacent escape characters like carret, percentsigns (and doublequotes) need more attention
  393.  
  394. Call :ClearVariablesByPrefix IndexOfSpecialChar
  395.  
  396. echo.
  397. set "_mystring=a%bcdef"
  398. set _mystring
  399. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  400. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  401. Call :ClearVariablesByPrefix IndexOfSpecialChar
  402.  
  403. echo.
  404. set "_mystring=ab%%%%%cdef"
  405. set _mystring
  406. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  407. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  408. Call :ClearVariablesByPrefix IndexOfSpecialChar
  409.  
  410. echo.
  411. set _mystring=abc%%%%%def
  412. set _mystring
  413. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  414. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  415. Call :ClearVariablesByPrefix IndexOfSpecialChar
  416.  
  417. echo.
  418. set "_mystring=abcd^^"ef"
  419. set _mystring
  420. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  421. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  422. Call :ClearVariablesByPrefix IndexOfSpecialChar
  423.  
  424. echo.
  425. set _mystring=abcde^^^"f
  426. set _mystring
  427. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  428. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  429. Call :ClearVariablesByPrefix IndexOfSpecialChar
  430.  
  431. echo.
  432. set "_mystring=abcd^^&ef"
  433. set _mystring
  434. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  435. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  436. Call :ClearVariablesByPrefix IndexOfSpecialChar
  437.  
  438. rem broken 'def' is not recognized as an internal or external command,
  439. echo.
  440. set _mystring=abc^^^^&def
  441. set _mystring
  442. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  443. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  444. Call :ClearVariablesByPrefix IndexOfSpecialChar
  445.  
  446. echo.
  447. set "_mystring=ab^^<cdef"
  448. set _mystring
  449. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  450. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  451. Call :ClearVariablesByPrefix IndexOfSpecialChar
  452.  
  453. rem broken The system cannot find the file specified. ?? <bcdef
  454. echo.
  455. set _mystring=a^^^^<bcdef
  456. set _mystring
  457. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  458. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  459. Call :ClearVariablesByPrefix IndexOfSpecialChar
  460.  
  461. echo.
  462. set "_mystring=ab^^>cdef"
  463. set _mystring
  464. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  465. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  466. Call :ClearVariablesByPrefix IndexOfSpecialChar
  467.  
  468. REM broken
  469. echo.
  470. set _mystring=abc^^^^>def
  471. set _mystring
  472. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  473. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  474. Call :ClearVariablesByPrefix IndexOfSpecialChar
  475.  
  476. echo.
  477. set "_mystring=abcd^^|ef"
  478. set _mystring
  479. Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  480. Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  481. Call :ClearVariablesByPrefix IndexOfSpecialChar
  482.  
  483.  
  484. REM This breaks the script on first set line
  485. REM echo.
  486. REM set _mystring=abcde^^^^|f
  487. REM set _mystring
  488. REM Call :ListUnescapedSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  489. REM Call :IsArrayDefinedBySet IndexOfSpecialChar[ && set IndexOfSpecialChar[ || echo Array IndexOfSpecialChar[x] is empty
  490. REM Call :ClearVariablesByPrefix IndexOfSpecialChar
  491.  
  492. echo demo finished
  493.  
  494. REM set "_mystring=abc^"def%%ghi^&k^<l^>m^^n|"
  495. REM Call :InsertEscapeCharacters _mystring
  496.  
  497. goto :eof
  498.  
  499.  
  500.  
  501.  
  502.  
  503. ::Usage Call :ListUnescapedSpecialCharactersInString byref InputVariable byref optional OutputArray optional SILENT
  504. :ListUnescapedSpecialCharactersInString
  505. Call :ClearVariablesByPrefix _ListUnescapedSpecialCharactersInString
  506. if "[%~2]" NEQ "[]" Call :GetArrayParameters %~2 _ListUnescapedSpecialCharactersInString_OutputArray Initialize -1
  507. if "[%~3]" EQU "[SILENT]" ( set "_ListUnescapedSpecialCharactersInString_silent=true" ) else ( set "_ListUnescapedSpecialCharactersInString_silent=false" )
  508. set /a "_ListUnescapedSpecialCharactersInString_previous_index=-1"
  509. set /a "_ListUnescapedSpecialCharactersInString_index=0"
  510. set /a "_ListUnescapedSpecialCharactersInString_next_index=1"
  511. setlocal enabledelayedexpansion
  512. :ListUnescapedSpecialCharactersInString-loop
  513. set "_ListUnescapedSpecialCharactersInString_previous_char=" & set "_ListUnescapedSpecialCharactersInString_next_char=" & set "_ListUnescapedSpecialCharactersInString_char="
  514. if %_ListUnescapedSpecialCharactersInString_previous_index% GEQ 0 set "_ListUnescapedSpecialCharactersInString_previous_char=!%~1:~%_ListUnescapedSpecialCharactersInString_previous_index%,1!"
  515. set "_ListUnescapedSpecialCharactersInString_char=!%~1:~%_ListUnescapedSpecialCharactersInString_index%,1!"
  516. set "_ListUnescapedSpecialCharactersInString_next_char=!%~1:~%_ListUnescapedSpecialCharactersInString_next_index%,1!"
  517. set "_ListUnescapedSpecialCharactersInString_escaped=false"
  518. set "_ListUnescapedSpecialCharactersInString_prev_type="
  519. set "_ListUnescapedSpecialCharactersInString_next_type="
  520. set "_ListUnescapedSpecialCharactersInString_current_type="
  521.  
  522. if !_ListUnescapedSpecialCharactersInString_previous_char!==%% (
  523. set "_ListUnescapedSpecialCharactersInString_prev_type=percentsign"
  524. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^" (
  525. set "_ListUnescapedSpecialCharactersInString_prev_type=doublequotes"
  526. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^& (
  527. set "_ListUnescapedSpecialCharactersInString_prev_type=ampersand"
  528. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^< (
  529. set "_ListUnescapedSpecialCharactersInString_prev_type=lessthan"
  530. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^> (
  531. set "_ListUnescapedSpecialCharactersInString_prev_type=greaterthan"
  532. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^^ (
  533. set "_ListUnescapedSpecialCharactersInString_prev_type=carret"
  534. ) else if !_ListUnescapedSpecialCharactersInString_previous_char!==^| (
  535. set "_ListUnescapedSpecialCharactersInString_prev_type=pipe"
  536. ) else (
  537. set "_ListUnescapedSpecialCharactersInString_prev_type=else"
  538. )
  539.  
  540.  
  541. if !_ListUnescapedSpecialCharactersInString_next_char!==%% (
  542. set "_ListUnescapedSpecialCharactersInString_next_type=percentsign"
  543. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^" (
  544. set "_ListUnescapedSpecialCharactersInString_next_type=doublequotes"
  545. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^& (
  546. set "_ListUnescapedSpecialCharactersInString_next_type=ampersand"
  547. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^< (
  548. set "_ListUnescapedSpecialCharactersInString_next_type=lessthan"
  549. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^> (
  550. set "_ListUnescapedSpecialCharactersInString_next_type=greaterthan"
  551. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^^ (
  552. set "_ListUnescapedSpecialCharactersInString_next_type=carret"
  553. ) else if !_ListUnescapedSpecialCharactersInString_next_char!==^| (
  554. set "_ListUnescapedSpecialCharactersInString_next_type=pipe"
  555. ) else (
  556. set "_ListUnescapedSpecialCharactersInString_next_type=else"
  557. )
  558.  
  559.  
  560. if !_ListUnescapedSpecialCharactersInString_char!==%% (
  561. set "_ListUnescapedSpecialCharactersInString_current_type=percentsign"
  562. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[percentsign]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  563. if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[percentsign]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  564. REM Clusters of uneven numbers of percentsigns will look escaped to this logic
  565. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character %% at index !_ListUnescapedSpecialCharactersInString_index! )
  566. ) else if !_ListUnescapedSpecialCharactersInString_char!==^" (
  567. set "_ListUnescapedSpecialCharactersInString_current_type=doublequotes"
  568. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  569. REM if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  570. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" echo Unescaped character " at index !_ListUnescapedSpecialCharactersInString_index!
  571. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^" at index !_ListUnescapedSpecialCharactersInString_index! )
  572. ) else if !_ListUnescapedSpecialCharactersInString_char!==^& (
  573. set "_ListUnescapedSpecialCharactersInString_current_type=ampersand"
  574. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  575. REM if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  576. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^& at index !_ListUnescapedSpecialCharactersInString_index! )
  577. ) else if !_ListUnescapedSpecialCharactersInString_char!==^< (
  578. set "_ListUnescapedSpecialCharactersInString_current_type=lessthan"
  579. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  580. REM if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  581. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^< at index !_ListUnescapedSpecialCharactersInString_index! )
  582. ) else if !_ListUnescapedSpecialCharactersInString_char!==^> (
  583. set "_ListUnescapedSpecialCharactersInString_current_type=greaterthan"
  584. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  585. REM if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  586. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^> at index !_ListUnescapedSpecialCharactersInString_index! )
  587. ) else if !_ListUnescapedSpecialCharactersInString_char!==^^ (
  588. set "_ListUnescapedSpecialCharactersInString_current_type=carret"
  589. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  590. if "[!_ListUnescapedSpecialCharactersInString_next_type!]" NEQ "[else]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  591. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^^ at index !_ListUnescapedSpecialCharactersInString_index! )
  592. ) else if !_ListUnescapedSpecialCharactersInString_char!==^| (
  593. set "_ListUnescapedSpecialCharactersInString_current_type=pipe"
  594. if "[!_ListUnescapedSpecialCharactersInString_prev_type!]" EQU "[carret]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  595. REM if "[!_ListUnescapedSpecialCharactersInString_next_type!]" EQU "[]" set "_ListUnescapedSpecialCharactersInString_escaped=true"
  596. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" if "[!_ListUnescapedSpecialCharactersInString_escaped!]" NEQ "[true]" ( echo Unescaped character ^| at index !_ListUnescapedSpecialCharactersInString_index! )
  597. ) else (
  598. set "_ListUnescapedSpecialCharactersInString_current_type=else"
  599. set "_ListUnescapedSpecialCharactersInString_escaped=true"
  600. if "[%_ListUnescapedSpecialCharactersInString_silent%]" NEQ "[true]" echo Character does not need escaping !_ListUnescapedSpecialCharactersInString_char! index !_ListUnescapedSpecialCharactersInString_index!
  601. )
  602.  
  603. REM this logic does not handle uneven numbers of double quotes or percentsigns
  604. REM in either case, WHERE to add extra percentsign and doublequotes ? Maybe just prefix with carrets ?
  605. endlocal & set "_ListUnescapedSpecialCharactersInString_current_type=%_ListUnescapedSpecialCharactersInString_current_type%" & set "_ListUnescapedSpecialCharactersInString_escaped=%_ListUnescapedSpecialCharactersInString_escaped%"
  606. if "[%_ListUnescapedSpecialCharactersInString_current_type%]" NEQ "[else]" if "[%_ListUnescapedSpecialCharactersInString_escaped%]" NEQ "[true]" set /a "_ListUnescapedSpecialCharactersInString_OutputArray.ubound+=1"
  607. if "[%_ListUnescapedSpecialCharactersInString_current_type%]" NEQ "[else]" if "[%_ListUnescapedSpecialCharactersInString_escaped%]" NEQ "[true]" set "%_ListUnescapedSpecialCharactersInString_OutputArray%[%_ListUnescapedSpecialCharactersInString_OutputArray.ubound%]=%_ListUnescapedSpecialCharactersInString_index%" & set "%_ListUnescapedSpecialCharactersInString_OutputArray%[%_ListUnescapedSpecialCharactersInString_OutputArray.ubound%].type=%_ListUnescapedSpecialCharactersInString_current_type%"
  608.  
  609. set /a "_ListUnescapedSpecialCharactersInString_previous_index+=1"
  610. set /a "_ListUnescapedSpecialCharactersInString_index+=1"
  611. set /a "_ListUnescapedSpecialCharactersInString_next_index+=1"
  612. setlocal enabledelayedexpansion
  613. if "!%~1:~%_ListUnescapedSpecialCharactersInString_index%,1!" NEQ "" GoTo :ListUnescapedSpecialCharactersInString-loop
  614. endlocal
  615.  
  616. Call :SetArrayParameters "%_ListUnescapedSpecialCharactersInString_OutputArray%" _ListUnescapedSpecialCharactersInString_OutputArray
  617. Call :ClearVariablesByPrefix _ListUnescapedSpecialCharactersInString
  618. GoTo :EOF
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626. ::Usage Call :GetArrayParameters InputArray ParameterVariable optional Initialize optional StartIndex=0
  627. :GetArrayParameters
  628. call set _GetArrayParameters.lbound=%%%~1.lbound%%
  629. call set _GetArrayParameters.ubound=%%%~1.ubound%%
  630. call set _GetArrayParameters.count=%%%~1.count%%
  631. call set _GetArrayParameters.index=%%%~1.index%%
  632. if "[%~3]"=="[Initialize]" (
  633. if "[%_GetArrayParameters.lbound%]"=="[]" set /a _GetArrayParameters.lbound=0
  634. if "[%_GetArrayParameters.ubound%]"=="[]" set /a _GetArrayParameters.ubound=-1
  635. if "[%_GetArrayParameters.count%]"=="[]" set /a _GetArrayParameters.count=%_GetArrayParameters.ubound%-%_GetArrayParameters.lbound%+1 2>nul
  636. if "[%_GetArrayParameters.index%]"=="[]" if "[%~4]"=="[]" ( set /a "_GetArrayParameters.index=0" ) else ( set /a "_GetArrayParameters.index=%~4" 2>nul )
  637. )
  638. set _GetArrayParameters.name=%~1
  639. set "%~2.lbound=%_GetArrayParameters.lbound%"
  640. set "%~2.ubound=%_GetArrayParameters.ubound%"
  641. set "%~2.count=%_GetArrayParameters.count%"
  642. set "%~2.index=%_GetArrayParameters.index%"
  643. if "[%_GetArrayParameters.name%]" NEQ "" set "%~2=%_GetArrayParameters.name%"
  644. Call :ClearVariablesByPrefix _GetArrayParameters & if "[%_GetArrayParameters.ubound%]"=="[]" ( exit /b 1 ) else ( exit /b 0 )
  645. GoTo :EOF
  646. ::GetArrayParameters-END
  647.  
  648.  
  649. ::Usage Call :SetArrayParameters OutputArray ParameterVariable optional lbound optional ubound optional index optional count
  650. :SetArrayParameters
  651. call set /a "_SetArrayParameters.lbound=%%%~2.lbound%%" 2>nul
  652. call set /a "_SetArrayParameters.ubound=%%%~2.ubound%%" 2>nul
  653. REM call set /a "_SetArrayParameters.count=%%%~2.count%%" 2>nul
  654. call set /a "_SetArrayParameters.index=%%%~2.index%%" 2>nul
  655. if not "[%~3]"=="[]" call :IsNumeric "%~3" || set /a "_SetArrayParameters.lbound=%~3" 2>nul
  656. if not "[%~4]"=="[]" call :IsNumeric "%~4" || set /a "_SetArrayParameters.ubound=%~4" 2>nul
  657. if not "[%~5]"=="[]" call :IsNumeric "%~5" || set /a "_SetArrayParameters.index=%~5" 2>nul
  658. REM if not "[%~6]"=="[]" call :IsNumeric "%~6" || set /a "_SetArrayParameters.count=%~6" 2>nul
  659. if "[%_SetArrayParameters.count%]"=="[]" if not "[%_SetArrayParameters.lbound%]"=="[]" if not "[%_SetArrayParameters.ubound%]"=="[]" set /a _SetArrayParameters.count=%_SetArrayParameters.ubound%-%_SetArrayParameters.lbound%+1 2>nul
  660. if not "[%_SetArrayParameters.lbound%]"=="[]" Call :IsNumeric "%_SetArrayParameters.lbound%" || set /a "%~1.lbound=%_SetArrayParameters.lbound%" 2>nul
  661. if not "[%_SetArrayParameters.ubound%]"=="[]" Call :IsNumeric "%_SetArrayParameters.ubound%" || set /a "%~1.ubound=%_SetArrayParameters.ubound%" 2>nul
  662. if not "[%_SetArrayParameters.index%]"=="[]" Call :IsNumeric "%_SetArrayParameters.index%" || set /a "%~1.index=%_SetArrayParameters.index%" 2>nul
  663. if not "[%_SetArrayParameters.count%]"=="[]" Call :IsNumeric "%_SetArrayParameters.count%" || set /a "%~1.count=%_SetArrayParameters.count%" 2>nul
  664. Call :ClearVariablesByPrefix _SetArrayParameters & if not "[%_SetArrayParameters.ubound%]"=="[]" ( exit /b 0 ) else ( exit /b 1 )
  665. GoTo :EOF
  666.  
  667. ::Usage Call :IsNumeric "%Value%" optional Output
  668. :IsNumeric
  669. if "[%~1]"=="[]" exit /b 0
  670. set "IsNumericInternal=-0123456789"
  671. echo.%~1| findstr /r "[^%IsNumericInternal%]" >nul && (
  672. if not "[%2]"=="[]" set %2=false
  673. ) || (
  674. if not "[%2]"=="[]" set %2=true
  675. )
  676. GoTo :EOF
  677.  
  678.  
  679. :: Usage Call :ClearVariablesByPrefix myPrefix
  680. :ClearVariablesByPrefix
  681. for /f "tokens=1,2 delims==" %%a in ('set %~1 2^>nul') do set %%a=
  682. GoTo :EOF
  683.  
  684.  
  685. :: Usage Call :IsArrayDefinedBySet Variable OutputValue
  686. :IsArrayDefinedBySet
  687. set /a _IsArrayDefinedBySet.index=0
  688. for /f "tokens=1* delims=" %%a in ('set %~1 2^>^&1') do ( call set _IsArrayDefinedBySet[%%_IsArrayDefinedBySet.index%%]=%%a & call set /a _IsArrayDefinedBySet.index+=1 )
  689. if not "[%_IsArrayDefinedBySet[0]%]"=="[%_IsArrayDefinedBySet[0]:Environment variable=%]" (
  690. if not "[%_IsArrayDefinedBySet[0]%]"=="[%_IsArrayDefinedBySet[0]:not defined=%]" set "_IsArrayDefinedBySet.IsDefined=false" ) else ( set "_IsArrayDefinedBySet.IsDefined=true" )
  691. if not "[%~2]"=="[]" set "%~2=%_IsArrayDefinedBySet.IsDefined%"
  692. Call :ClearVariablesByPrefix _IsArrayDefinedBySet & if "[%_IsArrayDefinedBySet.IsDefined%]"=="[true]" ( exit /b 0 ) else ( exit /b 1 )
  693. GoTo :EOF
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702. :IsArrayDefinedBySet-DEMO
  703. set mytestvar=1
  704. set mytestvar[0]=1
  705. set mytestvar[0].test=1
  706. set mytestvar[1]=1
  707.  
  708. Call :IsArrayDefinedBySet myteFFFFstvar && echo it is defined || echo it is not defined
  709. Call :IsArrayDefinedBySet mytestvar && echo it is defined || echo it is not defined
  710. Call :IsArrayDefinedBySet mytestvar[ && echo it is defined || echo it is not defined
  711. Call :IsArrayDefinedBySet mytestvar[0] && echo it is defined || echo it is not defined
  712. Call :IsArrayDefinedBySet mytestvar[1] && echo it is defined || echo it is not defined
  713. Call :IsArrayDefinedBySet mytestvar[2] && echo it is defined || echo it is not defined
  714.  
  715. goto :eof
  716.  
  717.  
  718. :GetArrayParameters-DEMO
  719.  
  720. set "mytestarray[0]=bla"
  721. set "mytestarray[1]=bla"
  722. set "mytestarray[2]=bla"
  723. set /a mytestarray.lbound=0
  724. set /a mytestarray.ubound=2
  725. set /a mytestarray.count=3
  726.  
  727. echo.
  728. echo testing with a declared array
  729. echo.
  730. Call :GetArrayParameters mytestarray _test1params && echo it was an array || echo it was not an array
  731. echo.
  732. echo set mytestarray
  733. set mytestarray
  734. echo set _test1params
  735. set _test1params
  736. echo.
  737.  
  738. echo.
  739. echo testing with a undeclared variable
  740. echo.
  741. Call :GetArrayParameters mynonarray _test2params && echo it was an array || echo it was not an array
  742. echo.
  743. echo set mynonarray
  744. set mynonarray
  745. echo set _test2params
  746. set _test2params
  747. echo.
  748.  
  749. echo.
  750. echo testing with a undeclared variable with Initialize
  751. echo.
  752. Call :GetArrayParameters mynonarray3 _test3params Initialize && echo it was an array || echo it was not an array
  753. echo.
  754. echo set mynonarray3
  755. set mynonarray3
  756. echo set _test3params
  757. set _test3params
  758. echo.
  759.  
  760. echo.
  761. echo testing with a undeclared variable with Initialize and specify an index of -1
  762. echo.
  763. Call :GetArrayParameters mynonarray4 _test4params Initialize -1 && echo it was an array || echo it was not an array
  764. echo.
  765. echo set mynonarray4
  766. set mynonarray4
  767. echo set _test4params
  768. set _test4params
  769. echo.
  770.  
  771. GoTo :EOF
  772.  
  773.  
  774.  
  775.  
  776. :ElseIF-DEMO
  777.  
  778. set "_mychar=a"
  779.  
  780. if "%_mychar%"=="b" ( echo it was b) else if "%_mychar%"=="c" ( echo it was c ) else if "%_mychar%"=="a" ( echo it was a ) else ( echo it was else )
  781.  
  782. if "%_mychar%"=="b" (
  783. echo it was b
  784. ) else if "%_mychar%"=="c" (
  785. echo it was c
  786. ) else if "%_mychar%"=="a" (
  787. echo it was a
  788. ) else (
  789. echo it was else
  790. )
  791.  
  792. set "_mychar=b"
  793.  
  794. if "%_mychar%"=="b" ( echo it was b) else if "%_mychar%"=="c" ( echo it was c ) else if "%_mychar%"=="a" ( echo it was a ) else ( echo it was else )
  795.  
  796. if "%_mychar%"=="b" (
  797. echo it was b
  798. ) else if "%_mychar%"=="c" (
  799. echo it was c
  800. ) else if "%_mychar%"=="a" (
  801. echo it was a
  802. ) else (
  803. echo it was else
  804. )
  805.  
  806. set "_mychar=c"
  807.  
  808. if "%_mychar%"=="b" ( echo it was b) else if "%_mychar%"=="c" ( echo it was c ) else if "%_mychar%"=="a" ( echo it was a ) else ( echo it was else )
  809.  
  810. if "%_mychar%"=="b" (
  811. echo it was b
  812. ) else if "%_mychar%"=="c" (
  813. echo it was c
  814. ) else if "%_mychar%"=="a" (
  815. echo it was a
  816. ) else (
  817. echo it was else
  818. )
  819.  
  820. set "_mychar=%%"
  821.  
  822. if "%_mychar%"=="b" ( echo it was b) else if "%_mychar%"=="c" ( echo it was c ) else if "%_mychar%"=="a" ( echo it was a ) else ( echo it was else )
  823.  
  824. if "%_mychar%"=="b" (
  825. echo it was b
  826. ) else if "%_mychar%"=="c" (
  827. echo it was c
  828. ) else if "%_mychar%"=="a" (
  829. echo it was a
  830. ) else (
  831. echo it was else
  832. )
  833. GoTo :EOF
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864. ::Usage Call :ListSpecialCharactersInString byref InputVariable byref optional OutputArray optional SILENT
  865. :ListSpecialCharactersInString
  866. set "_ListSpecialCharactersInString_char="
  867. if "[%~2]" NEQ "[]" Call :GetArrayParameters %~2 _ListSpecialCharactersInString_OutputArray Initialize -1
  868. REM if "[%~2]" NEQ "[]" echo _ListSpecialCharactersInString_OutputArray %~2 %_ListSpecialCharactersInString_OutputArray%
  869. REM if "[%~2]" NEQ "[]" set _ListSpecialCharactersInString_OutputArray
  870. if "[%~3]" EQU "[SILENT]" ( set "_ListSpecialCharactersInString_silent=true" ) else ( set "_ListSpecialCharactersInString_silent=false" )
  871. set /a "_ListSpecialCharactersInString_index=0"
  872. setlocal enabledelayedexpansion
  873. :ListSpecialCharactersInString-loop
  874. set "_ListSpecialCharactersInString_char=!%~1:~%_ListSpecialCharactersInString_index%,1!"
  875.  
  876. if !_ListSpecialCharactersInString_char!==%% (
  877. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character %% at index !_ListSpecialCharactersInString_index!
  878. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=percentsign"
  879. ) else if !_ListSpecialCharactersInString_char!==^" (
  880. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character " at index !_ListSpecialCharactersInString_index!
  881. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=doublequotes"
  882. ) else if !_ListSpecialCharactersInString_char!==^& (
  883. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character ^& at index !_ListSpecialCharactersInString_index!
  884. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=ampersand"
  885. ) else if !_ListSpecialCharactersInString_char!==^< (
  886. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character ^< at index !_ListSpecialCharactersInString_index!
  887. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=lessthan"
  888. ) else if !_ListSpecialCharactersInString_char!==^> (
  889. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character ^> at index !_ListSpecialCharactersInString_index!
  890. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=greaterthan"
  891. ) else if !_ListSpecialCharactersInString_char!==^^ (
  892. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character ^^ at index !_ListSpecialCharactersInString_index!
  893. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=carret"
  894. ) else if !_ListSpecialCharactersInString_char!==^| (
  895. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Special character ^| at index !_ListSpecialCharactersInString_index!
  896. if "[%~2]" NEQ "[]" set "_ListSpecialCharactersInString_current_type=pipe"
  897. ) else (
  898. if "[%_ListSpecialCharactersInString_silent%]" NEQ "[true]" echo Normal character else !_ListSpecialCharactersInString_char! at index !_ListSpecialCharactersInString_index!
  899. )
  900.  
  901. endlocal & set "_ListSpecialCharactersInString_current_type=%_ListSpecialCharactersInString_current_type%"
  902. if "[%_ListSpecialCharactersInString_current_type%]" NEQ "[]" set /a "_ListSpecialCharactersInString_OutputArray.ubound+=1"
  903. if "[%_ListSpecialCharactersInString_current_type%]" NEQ "[]" set "%_ListSpecialCharactersInString_OutputArray%[%_ListSpecialCharactersInString_OutputArray.ubound%]=%_ListSpecialCharactersInString_index%" & set "%_ListSpecialCharactersInString_OutputArray%[%_ListSpecialCharactersInString_OutputArray.ubound%].type=%_ListSpecialCharactersInString_current_type%"
  904. set "_ListSpecialCharactersInString_current_type="
  905. set /a "_ListSpecialCharactersInString_index+=1"
  906. setlocal enabledelayedexpansion
  907. if "!%~1:~%_ListSpecialCharactersInString_index%,1!" NEQ "" GoTo :ListSpecialCharactersInString-loop
  908. endlocal
  909.  
  910. Call :SetArrayParameters "%_ListSpecialCharactersInString_OutputArray%" _ListSpecialCharactersInString_OutputArray
  911. Call :ClearVariablesByPrefix _ListSpecialCharactersInString
  912. GoTo :EOF
  913.  
  914. :ListSpecialCharactersInString-DEMO
  915.  
  916. echo.
  917. set "_mystring=a%bcdef"
  918. set _mystring
  919. Call :ListSpecialCharactersInString _mystring
  920.  
  921. echo.
  922. set "_mystring=ab%%cdef"
  923. set _mystring
  924. Call :ListSpecialCharactersInString _mystring
  925.  
  926. echo.
  927. set _mystring=abc%%def
  928. set _mystring
  929. Call :ListSpecialCharactersInString _mystring
  930.  
  931. echo.
  932. set "_mystring=abcd"ef"
  933. set _mystring
  934. Call :ListSpecialCharactersInString _mystring
  935.  
  936. echo.
  937. set _mystring=abcde"f
  938. set _mystring
  939. Call :ListSpecialCharactersInString _mystring
  940.  
  941. echo.
  942. set "_mystring=abcd&ef"
  943. set _mystring
  944. Call :ListSpecialCharactersInString _mystring
  945.  
  946. echo.
  947. set _mystring=abc^&def
  948. set _mystring
  949. Call :ListSpecialCharactersInString _mystring
  950.  
  951. echo.
  952. set "_mystring=ab<cdef"
  953. set _mystring
  954. Call :ListSpecialCharactersInString _mystring
  955.  
  956. echo.
  957. set _mystring=a^<bcdef
  958. set _mystring
  959. Call :ListSpecialCharactersInString _mystring
  960.  
  961. echo.
  962. set "_mystring=ab>cdef"
  963. set _mystring
  964. Call :ListSpecialCharactersInString _mystring
  965.  
  966. echo.
  967. set _mystring=abc^>def
  968. set _mystring
  969. Call :ListSpecialCharactersInString _mystring
  970.  
  971. echo.
  972. set "_mystring=abcd|ef"
  973. set _mystring
  974. Call :ListSpecialCharactersInString _mystring
  975.  
  976. echo.
  977. set _mystring=abcde^|f
  978. set _mystring
  979. Call :ListSpecialCharactersInString _mystring
  980.  
  981. echo.
  982. echo now with output index of all special characters found
  983.  
  984. Call :ClearVariablesByPrefix IndexOfSpecialChar
  985.  
  986. echo.
  987. set "_mystring=a%bcdef"
  988. set _mystring
  989. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  990. set IndexOfSpecialChar[
  991. Call :ClearVariablesByPrefix IndexOfSpecialChar
  992.  
  993. echo.
  994. set "_mystring=ab%%cdef"
  995. set _mystring
  996. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  997. set IndexOfSpecialChar[
  998. Call :ClearVariablesByPrefix IndexOfSpecialChar
  999.  
  1000. echo.
  1001. set _mystring=abc%%def
  1002. set _mystring
  1003. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1004. set IndexOfSpecialChar[
  1005. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1006.  
  1007. echo.
  1008. set "_mystring=abcd"ef"
  1009. set _mystring
  1010. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1011. set IndexOfSpecialChar[
  1012. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1013.  
  1014. echo.
  1015. set _mystring=abcde"f
  1016. set _mystring
  1017. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1018. set IndexOfSpecialChar[
  1019. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1020.  
  1021. echo.
  1022. set "_mystring=abcd&ef"
  1023. set _mystring
  1024. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1025. set IndexOfSpecialChar[
  1026. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1027.  
  1028. echo.
  1029. set _mystring=abc^&def
  1030. set _mystring
  1031. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1032. set IndexOfSpecialChar[
  1033. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1034.  
  1035. echo.
  1036. set "_mystring=ab<cdef"
  1037. set _mystring
  1038. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1039. set IndexOfSpecialChar[
  1040. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1041.  
  1042. echo.
  1043. set _mystring=a^<bcdef
  1044. set _mystring
  1045. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1046. set IndexOfSpecialChar[
  1047. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1048.  
  1049. echo.
  1050. set "_mystring=ab>cdef"
  1051. set _mystring
  1052. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1053. set IndexOfSpecialChar[
  1054. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1055.  
  1056. echo.
  1057. set _mystring=abc^>def
  1058. set _mystring
  1059. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1060. set IndexOfSpecialChar[
  1061. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1062.  
  1063. echo.
  1064. set "_mystring=abcd|ef"
  1065. set _mystring
  1066. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1067. set IndexOfSpecialChar[
  1068. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1069.  
  1070. echo.
  1071. set _mystring=abcde^|f
  1072. set _mystring
  1073. Call :ListSpecialCharactersInString _mystring IndexOfSpecialChar SILENT
  1074. set IndexOfSpecialChar[
  1075. Call :ClearVariablesByPrefix IndexOfSpecialChar
  1076.  
  1077.  
  1078.  
  1079.  
  1080. REM set "_mystring=abc^"def%%ghi^&k^<l^>m^^n|"
  1081. REM Call :InsertEscapeCharacters _mystring
  1082.  
  1083. goto :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement