Advertisement
marioq

usefultools01.cmd

May 24th, 2024 (edited)
548
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 62.56 KB | None | 0 0
  1. @echo off
  2. setlocal
  3. for /f "tokens=1,2 delims=:" %%A in ('chcp') do (
  4.     set "CHCP_OLD=%%B"
  5. )
  6. chcp 65001 >nul
  7.  
  8. ::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. :::: caratteri speciali > < | & )( ! " ^ sono interpretati
  10. :::: in modo speciale da "setlocal enabledelayedexpansion"
  11. :::: per lavorare con STRLEN trasformo i caratteri speciali
  12. :::: in caratteri innocui a "setlocal enabledelayedexpansion"
  13. ::::
  14. :::: limite della riga di comando
  15. :::: https://learn.microsoft.com/it-IT/troubleshoot/windows-client/shell-experience/command-line-string-limitation
  16. if /i "%1" == "strlen" (
  17.     set "STRLEN=%1"
  18. )
  19. if not defined STRLEN (
  20.     goto :STRLEN_ck_end
  21. )
  22. set "STR_4_strlen="%*""
  23. ::::::::::::::::::::::::
  24. :::: REM ASCI 161 ¡ -The extended ASCII codes,Inverted exclamation mark- https://www.ascii-code.com/ - https://ss64.com/ascii.html
  25. set "STR_4_strlen=%STR_4_strlen:!=¿%" & REM alt+0191==¿
  26. set "STR_4_strlen=%STR_4_strlen:>=¿%"
  27. set "STR_4_strlen=%STR_4_strlen:<=¿%"
  28. set "STR_4_strlen=%!!|%"
  29. set "STR_4_strlen=%STR_4_strlen:&=¿%"
  30. REM set "STR_4_strlen=%STR_4_strlen:"=¶%" & REM alt+0182==¶
  31. set "STR_4_strlen=%STR_4_strlen:"=•%" & REM alt+0149==•
  32. set "STR_4_strlen=%STR_4_strlen:^=¿%"
  33. set "STR_4_strlen=%STR_4_strlen:(=¿%"
  34. set "STR_4_strlen=%STR_4_strlen:)=¿%"
  35. ::::::::::::::::::::::::
  36.  
  37. REM set "STR_quote=¶"    & REM alt+0182==¶
  38. set "STR_quote=•"    & REM alt+0149==•
  39. set "STR_quote_L=„‡»" & REM alt+0132==„ alt+0135==‡ alt+187==»
  40. set "STR_quote_R=«‡„" & REM alt+0171==« alt+0135==‡ alt+0132==„
  41. REM set "STR_quote_L=؇»" & REM alt+0216==Ø alt+0135==‡ alt+187==»
  42. REM set "STR_quote_R=«‡Ø" & REM alt+0171==« alt+0135==‡ alt+0216==Ø
  43. REM set "STR_quote_L=.‡»" & REM alt+0135==‡ alt+187==»
  44. REM set "STR_quote_R=«‡." & REM alt+0171==« alt+0135==‡
  45. REM set "STR_dummy=¿"       „
  46.  
  47. set "STR_4_strlen=%STR_quote_L%%STR_4_strlen%%STR_quote_R%"
  48. REM echo\00000000 STR_4_strlen==%STR_4_strlen%
  49. :::::::::
  50.  
  51. ::::::::::::::::::::::::::::::::::::::::::::::::::::
  52. ::::::::::::::::::::::::::::::::::::::::::::::::::::
  53. ::::REM set "Q="!"" & call :STR_set_dummy "%Q%"
  54. ::::REM set "Q=">"" & call :STR_set_dummy "%Q%"
  55. ::::REM set "Q="<"" & call :STR_set_dummy "%Q%"
  56. ::::REM set "Q="|"" & call :STR_set_dummy "%Q%"
  57. ::::REM set "Q="&"" & call :STR_set_dummy "%Q%"
  58. ::::REM set "Q=")"" & call :STR_set_dummy "%Q%"
  59. ::::REM set "Q="("" & call :STR_set_dummy "%Q%"
  60. ::::REM set "Q="^^"" & call :STR_set_dummy "%Q%"
  61. ::::REM set "STR_4_strlen=%STR_4_strlen:"=•%"
  62. ::::REM REM call :STR_set_dummy "^"
  63. ::::
  64. ::::REM :STR_set_dummy
  65. ::::REM if not "%0" == ":STR_set_dummy" goto :STR_set_dummy_end
  66. ::::    REM REM set "Q=%~1"
  67. ::::    REM echo\ "Q==%Q~%"
  68. ::::    REM set "STR_4_strlen=%STR_4_strlen:%%Q~%%=%%STR_dummy%%"
  69. ::::    REM call set Q=
  70. ::::REM goto :EOF
  71. ::::REM :STR_set_dummy_end
  72. ::::::::::::::::::::::::::::::::::::::::::::::::::::
  73. ::::::::::::::::::::::::::::::::::::::::::::::::::::
  74. ::::::::::::::::::::::::
  75. REM echo\\\\\\\\\\01 error==%errorlevel%
  76. REM echo\\\\\\\\\\STR_4_strlen==%STR_4_strlen%
  77. :::::::::::::::::::::::
  78. :STRLEN_ck_end
  79.  
  80. if not defined STR_4_strlen goto :STRLEN_no
  81. (
  82.     endlocal
  83.     setlocal enabledelayedexpansion
  84.     set "STRLEN=%STRLEN%"
  85.     set "STR_quote=%STR_quote%"
  86.     set "STR_quote_L=%STR_quote_L%"
  87.     set "STR_quote_R=%STR_quote_R%"
  88.     set "STR_4_strlen=%STR_4_strlen%"
  89.     set "my_STR_length="
  90.     set "CHCP_OLD=%CHCP_OLD%"
  91. )
  92. goto :STRLEN_NEXT_start
  93. :STRLEN_no
  94. (
  95.     endlocal
  96.     setlocal enabledelayedexpansion
  97.     set "CHCP_OLD=%CHCP_OLD%"
  98. )
  99. :STRLEN_NEXT_start
  100. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  101. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  102. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  103.  
  104. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  105. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  106. :::: imposto un titolo alla finestrta in modo da poterla riconoscere
  107. set "THIS_RANDOM=%random%"
  108. title %~n0-%THIS_RANDOM% %username% "%cd%"
  109. set N=
  110. for /f "tokens=1,2,3" %%A in ('tasklist /NH /FI "WINDOWTITLE eq %~n0-%%THIS_RANDOM%% %%username%%*"') do (
  111.     set /a N+=1
  112.     if !N! EQU 1 (
  113.         set "B=%%B"
  114.         echo\!B! | findstr /r /c:"^[0-9][0-9]*.$" >nul 2>&1
  115.         if !errorlevel! EQU 0 (
  116.             set "THIS_file_pid=!B!"
  117.             REM echo\QQQ "THIS_file_pid==!THIS_file_pid! A==%%A - B==!B! pid==!THIS_file_pid! - C==%%C "
  118.         ) else (
  119.             set "THIS_file_pid=%THIS_RANDOM:~2,-2%%date:/=% "
  120.             REM set "THIS_file_pid=%THIS_RANDOM:~0,2%dummy%date:/=%"
  121.             REM echo\WWW "THIS_file_pid==!THIS_file_pid! A==%%A - B==!B! pid==!THIS_file_pid! - C==%%C"
  122.         )
  123.     )
  124. )
  125. title %~n0-%THIS_file_pid%-%THIS_RANDOM% %username% "%cd%"
  126. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  127. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  128.  
  129. set "THIS_file=%~nx0"
  130. set "THIS_file=%THIS_file:"=%"
  131. set "THIS_file_size=%~z0"
  132. set "THIS_file_date=%~t0"
  133. :::: se "THIS_file_size" è definita, il valore di "%~dp0" è il percorso reale del file.
  134. :::: se "THIS_file_size" non è definita, il valore di "%~dp0" è il percorco della directory al prompt che invoca lo script.
  135. :::: -|Strano comportamento, se "%THIS_file%" è in un percorso in "path" e viene invocato il nome tra vergolette "nomeFile.cmd"
  136. :::: -|"%~dp0" prende il valore della directory corrente e non della dir che contiene il "nomeFile.cmd"
  137. :::: -|"THIS_file_size=%~z0" e "THIS_file_date=%~t0" sono valorizzate se "%~dp0" è il percorso reale a "nomeFile.cmd"
  138. :::: if not [%cd%\]==[%~dp0] set "THIS_file_path=%~dp0"
  139.  
  140. if defined THIS_file_size set "THIS_file_path=%~dp0"
  141. set "THIS_file_full_path=%THIS_file_path%%THIS_file%"
  142. REM echo\-----------"cd=%cd%" "~dp0=%~dp0"
  143. REM echo\-----------"THIS_file=%THIS_file%"
  144. REM echo\-----------"THIS_file_path=%THIS_file_path%"
  145. REM echo\-----------"THIS_file_size=%THIS_file_size%"
  146. REM echo\-----------"THIS_file_date=%THIS_file_date%"
  147. REM echo\-----------"THIS_file_full_path=%THIS_file_path%%THIS_file%"
  148. REM echo\----------- 0=%0  0~=%~0 p=%~p0
  149.  
  150.  
  151.     set "ALL_0arg="%*""
  152.  
  153.  
  154.  
  155. set "TIME_start=%time%"
  156. set "ERROR="
  157. ::::::::::::
  158. :::: set "ESC=" & REM notepad++ "alt+27"
  159. for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set "ESC=%%b" )
  160. set "C_RED=%ESC%^[91m" & REM Testo Rosso
  161. set "C__=%ESC%^[4m" & REM Sottolineato
  162. set "C_0=%ESC%^[0m" & REM Reset color
  163. :::::::::::
  164.  
  165. set "RESET_all_var=for /f "delims=^=" %%Z in ^('@set my_'^) do @set "%%Z=" "
  166. :::: Il carattere § viene sostituito da %LF% "echo %MSG:§=!LF!%"
  167.  
  168. set "MSG=-visualizza con ^"set my_^" §-resetta, elimina tutte le var ^"my_^" §* %RESET_all_var% §- exit %%errorlevel%% EQU-Uguale 0 -successo- §- exit %%errorlevel%% GEQ-Maggiore o uguale a 1 -errore-"
  169. ::::::::::
  170. :::: imposto Line-Fedd
  171. :::: dopo LF=^ 2 righe vuote da non eliminare
  172. set LF=^
  173.  
  174.  
  175. :::::::::::::::::: 2 righe vuote da non eliminare
  176.  
  177. if exist "%THIS_file_path%UnxUtils\tr.exe" (
  178.     set "TR_exe=%THIS_file_path%UnxUtils\tr.exe"
  179. )
  180. if exist "%THIS_file_path%cmdow.exe" (
  181.     set "CMDOW_exe=%THIS_file_path%cmdow.exe"
  182. )
  183. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  184. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  185.  
  186. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  187. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  188.  
  189. if "%1"=="" (
  190.     set "ERROR_start=Manca il parametro corretto"
  191.     call :HEADER
  192.     call :SOS_all
  193.     call :FOOTER
  194. )
  195. :::::::::::::::::::
  196. if /i "%1"=="my_ip4" (
  197.     call :HEADER
  198.     goto :%~1
  199. )
  200. if /i "%1"=="ip4" (
  201.     call :HEADER
  202.     goto :my_ip4
  203. )
  204. :::::::::::::::::::
  205.  
  206. if /i "%1"=="where_is_ff" (
  207.     call :HEADER
  208.     goto :%~1
  209. )
  210. if /i "%1"=="my_date" (
  211.     call :HEADER
  212.     goto :%~1
  213. )
  214.  
  215. if /i "%1"=="geoip" (
  216.     call :HEADER
  217.     goto :%~1
  218. )
  219.  
  220. if /i "%1"=="user_is_admin" (
  221.     call :HEADER
  222.     goto :%~1
  223. )
  224.  
  225. if /i "%1"=="run_as_admin" (
  226.     call :HEADER
  227.     goto :%~1
  228. )
  229.  
  230. if /i "%1"=="NIC" (
  231.     call :HEADER
  232.     goto :%~1
  233. )
  234.  
  235. if /i "%1"=="strlen" (
  236.     call :HEADER
  237.     goto :%~1
  238. )
  239.  
  240. if /i "%1"=="-h" set "SOS=-h"
  241. if /i "%1"=="/h" set "SOS=/h"
  242. if /i "%1"=="h" set "SOS=h"
  243. if /i "%1"=="/?" set "SOS=/?"
  244. if /i "%1"=="-?" set "SOS=-?"
  245. if /i "%1"=="?" set "SOS=^?"
  246. if defined SOS (
  247.     set "H_P2=%~2"
  248.     call :HEADER
  249.     if defined H_P2 (
  250.         for /f "tokens=*" %%A in ( 'findstr /r /x /c:"^[:][A-Z_0-9].*_sos$" "%THIS_file_full_path%"' ) do (
  251.             set "X=%%A"
  252.             set "X=!X::=!"
  253.             set "X=!X:_sos=!"
  254.             if /i "!X!"=="!H_P2!" (
  255.                 set "ALL_0arg=%1 !H_P2!"
  256.                 set "ERROR_help=sos per "!H_P2!""
  257.                 if !X!§==RUN_AS_ADMIN§ set Xopt=NO_CMDOW_exe
  258.                 call %%A !X! !Xopt!
  259.                 echo\::------
  260.                 echo\::%MSG:§=!LF!::%
  261.                 call :FOOTER
  262.                 exit /b %ERROR%
  263.             )
  264.         )
  265.         if /i "!H_P2!"=="all" (
  266.             set "ERROR_help=sos per "!H_P2!"..."
  267.             for /f "tokens=*" %%A in ( 'findstr /r /x /c:"^[:][A-Z_0-9].*_sos$" "%THIS_file_full_path%"' ) do (
  268.                 set "ALL_0arg=%1 !H_P2!"
  269.                 set "X=%%A"
  270.                 set "X=!X::=!"
  271.                 set "X=!X:_sos=!"
  272.                 call %%A !X!
  273.                 echo\::^|-----------------
  274.                 echo\::------------------
  275.             )
  276.             echo\::%MSG:§=!LF!::%
  277.             call :FOOTER
  278.             exit /b %ERROR%
  279.         )
  280.     )
  281.     if not defined H_P2 (
  282.         REM set "ERROR_parametro_-h="%1" richiede valore"
  283.         set "ERROR_parametro_%SOS%="%1" richiede valore"
  284.         echo\::* %THIS_file% %1
  285.         echo\::  -richiede parametro... .. .
  286.         for /f "tokens=*" %%A in ( 'findstr /r /x /c:"^[:][A-Z_0-9].*_sos$" "%THIS_file_full_path%"' ) do (
  287.             set "X=%%A"
  288.             set "X=!X::=!"
  289.             set "X=!X:_sos=!"
  290.             echo\::    !X!
  291.         )
  292.         call :FOOTER
  293.         exit /b %ERROR%
  294.     )
  295.     if not "!H_P2!"=="" (
  296.         set "ERROR_parametro_%SOS%=^"!H_P2!^" non valido^"
  297.         echo\::* %THIS_file% %1 !H_P2!
  298.         echo\::  PARAMETRO "!H_P2!" non valido
  299.         set N=
  300.         for /f "tokens=*" %%A in ( 'findstr /r /x /c:"^[:][A-Z_0-9].*_sos$" "%THIS_file_full_path%" ^| sort' ) do (
  301.             set /a N+=1
  302.             set "X=%%A"
  303.             set "X=!X::=!"
  304.             set "X=!X:_sos=!"
  305.             if !N! EQU 1 (
  306.                 echo\::  prova %1 !X!
  307.             ) else (
  308.                 echo\::        %1 !X!
  309.             )
  310.         )
  311.         call :FOOTER
  312.         exit /b %ERROR%
  313.     )
  314. )
  315.  
  316.  
  317. if not "%1"=="" (
  318.     set "ERROR_parametro=Parametro "%~1" non valido "
  319.     call :HEADER
  320.     call :SOS_all
  321.     call :FOOTER
  322.     exit /b %ERROR%
  323. )
  324.  
  325. ::::
  326. ::::
  327. ::::
  328. goto :EOF
  329. :START
  330.  
  331. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  332. REM :::::::::::  modello per nuove funzioni  ::::::::::::::::::::::::::::::::
  333. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  334. REM :::::::::::::: my_function ::::::::::::::::::::::::::::::::::::::::::::::
  335. REM :::::::::::::: my_function ::::::::::::::::::::::::::::::::::::::::::::::
  336. REM goto :function_end
  337. REM :function
  338. REM :FUNCTION_sos
  339. REM if not "%~0"==":FUNCTION_sos" goto :function_sos_end
  340.     REM echo\::* %THIS_file% %C__%%~1%C_0% .
  341.     REM echo\:: la funzione di sos deve iniziare con "^[:][A-Z0-9]*[_].*"
  342.     REM echo\::                    deve finire con ".*_sos$"
  343.     REM echo\:: scrivi qui sos per my_function
  344.     REM echo\::
  345.     REM echo\::
  346.     REM echo\::
  347.     REM echo\::
  348.     REM exit /b %ERROR%
  349. REM :function_sos_end
  350.  
  351.     REM echo scrivi qui lo script da eseguire
  352.     REM echo scrivi qui lo script da eseguire
  353.     REM echo scrivi qui lo script da eseguire
  354.  
  355.     REM if "%qualche errore per uscire%"=="qualche errore per uscire" (
  356.         REM set "ERROR_brevissima_descrizione=spiegazione estesa ma concisa"
  357.         REM echo\::
  358.         REM echo\::  ERRORE bla bla bla
  359.         REM echo\::
  360.         REM call :FOOTER
  361.         REM exit /b %ERROR%
  362.     REM )
  363.  
  364.     REM echo\::::::::::::::::::::::::::::::::::::::::
  365.     REM echo\::%MSG:§=!LF!::%
  366.     REM call :FOOTER
  367.     REM (
  368.     REM endlocal
  369.         REM set "my_VAR_00=%VALORE00_da restituire%"
  370.         REM set "my_VAR_01=%VALORE01_da restituire%"
  371.         REM exit /b %ERROR%
  372.     REM )
  373. REM :function_end
  374. REM :::::::::::::: function end ::::::::::::::::::::::::::::::::::::::::::
  375. REM :::::::::::::: function end ::::::::::::::::::::::::::::::::::::::::::
  376. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  377. REM :::::::::::  fine modello per nuove funzioni  :::::::::::::::::::::::::::
  378. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  379.  
  380.  
  381.  
  382. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  383. :::::::::::::: STRLEN ::::::::::::::::::::::::::::::::::::::::::::::
  384. :::::::::::::: STRLEN ::::::::::::::::::::::::::::::::::::::::::::::
  385. goto :STRlen_end
  386. :strlen
  387. :STRLEN_sos
  388. if not "%~0"==":STRLEN_sos" goto :STRLEN_sos_end
  389.     echo\::* %THIS_file% %C__%%~1%C_0% .
  390.     echo\::
  391.     echo\:: Conta la lunghezza di una stringa di caratteri passata come argomento
  392.     echo\:: ed imposta la variabile my_STR_length con il valore della lunghezza.
  393.     echo\::* La lunghezza massima della stringa che è possibile usare al prompt
  394.     echo\:: dei comandi è di 8191 caratteri.
  395.     REM echo\::*https://learn.microsoft.com/it-IT/troubleshoot/windows-client/shell-experience/command-line-string-limitation
  396.     echo\::* Caratteri speciali %C_RED%^)^("^!^>^|^<^&^^ %C_0% devono essere racchiusi tra %C_RED%"%C_0%^)^(^!^>^|^<^&^^%C_RED%"%C_0%
  397.     echo\:: Prima del conteggio sono trasformati in caratteri innocui.
  398.     echo\::   %C_RED%^)^(^!^>^|^<^&^^ %C_0%sono sostituiti con %C_RED%¿%C_0%, %C_RED%^" %C_0%é sostituita con %C_RED%%C_0% .
  399.     REM echo\:: I caratteri di reindirizzamento e di raggruppamento %C_RED%)(^>^|^<^& %C_0% devono essere racchiusi con ^"%C_RED%^>^|^<^&%C_0%^"
  400.     echo\:: Esempio:
  401.     echo\:: * %THIS_file% %~1 topolino pippo e pluto
  402.     echo\::        restituisce la variabile my_STR_length=22
  403.     echo\:: * %THIS_file% %~1 topolino pippo e pluto ">|<&"
  404.     echo\::        restituisce la variabile my_STR_length=29
  405.     echo\:: *^|%THIS_file% %~1 "topolino pippo e pluto "^>^|^<^&"
  406.     echo\::  ^|   non viene eseguita.
  407.     echo\::  ^|   Il secondo " chiude la stringa che non viene riaperta per >|<&"
  408.     echo\:: *^|%THIS_file% %~1 "topolino pippo e pluto "">|<&"
  409.     echo\::  ^|    così va bene, restituisce la variabile my_STR_length=31
  410.     echo\:: * %THIS_file% %~1 "topolino > pippo < & | pluto! >|<&"
  411.     echo\::        restituisce la variabile my_STR_length=35
  412.     exit /b %ERROR%
  413. :strlen_sos_end
  414. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  415. if defined STR_4_strlen (
  416.     if not "%STR_4_strlen:~50,60%"=="" (
  417.         set "STR_4_strlen_dummy=!STR_4_strlen:%STR_quote_L%%STR_quote%%STRLEN%=!"
  418.         set "ALL_0arg=%1 !STR_4_strlen_dummy:~0,35!... .. .  .continua"
  419.     ) else (
  420.         set "STR_4_strlen_dummy=!STR_4_strlen:%STR_quote_L%%STR_quote%%STRLEN%=!"
  421.         set "STR_4_strlen_dummy=!STR_4_strlen_dummy:%STR_quote%%STR_quote_R%=!"
  422.         set "ALL_0arg=%1 !STR_4_strlen_dummy!"
  423.     )
  424. )
  425.  
  426. set "my_STR_length="
  427. :::: rimuovo strlen all'inizio di %*
  428.     REM echo\:: 00 STR_4_strlen==^|%STR_4_strlen%^|
  429.     set "STR_4_strlen=!STR_4_strlen:%STR_quote_L%%STR_quote%%STRLEN%=%STR_quote_L%%STR_quote%!"
  430.     REM echo\:: 01 STR_4_strlen==^|%STR_4_strlen%^|
  431.  
  432.     set /a N_blank=0
  433.     REM  rimuovo gli spazi iniziali
  434.     :STR_4_strlen_loop
  435.     REM echo\:: loop %N_blank% STRLEN==^|%STRLEN%^|
  436.     if "%STR_4_strlen:~0,5%" == "%STR_quote_L%%STR_quote% " (
  437.         set "STR_4_strlen=!STR_4_strlen:%STR_quote_L%%STR_quote% =%STR_quote_L%%STR_quote%!"
  438.         set "STRLEN=!STRLEN! "
  439.         set /a N_blank+=1
  440.         goto :STR_4_strlen_loop
  441.     )
  442.     REM echo\:: 1 STR_4_strlen==^|!STR_4_strlen!^|
  443.  
  444.     set "STR_4_strlen=!STR_4_strlen:%STR_quote_L%%STR_quote%=!"
  445.     set "STR_4_strlen=!STR_4_strlen:%STR_quote%%STR_quote_R%=!"
  446.  
  447.     REM echo\:: 02 STR_4_strlen==^|%STR_4_strlen%^|
  448.  
  449.     if "%STR_4_strlen%" == "" (
  450.         set "ERROR_strlen_no_string=STRLEN senza stringa da contare"
  451.         echo\::
  452.         echo\::  PARAMETRO %%1 "%1" OK
  453.         echo\::  !ERROR_strlen_no_string!
  454.         echo\::  Fornisci una stringa per contarne la lunghezza
  455.         echo\::
  456.         call :FOOTER
  457.         exit /b %ERROR%
  458.     )
  459.  
  460.     if not "!STR_4_strlen:~50,60!"=="" (
  461.         echo\::
  462.         echo\:: caratteri speciali %C_RED%^)^("^!^>^|^<^&^^ %C_0%
  463.         echo\:: sono trattati in modo speciale; vedi
  464.         echo\:: ** %THIS_file% ? strlen
  465.         echo\::
  466.         echo\::                !STR_4_strlen:~0,35!... .. .  .continua
  467.     ) else (
  468.         echo\::
  469.         echo\:: caratteri speciali %C_RED%^)^("^!^>^|^<^&^^ %C_0%
  470.         echo\:: sono trattati im modo speciale; vedi
  471.         echo\:: ** %THIS_file% ? strlen
  472.         echo\::
  473.         echo\::                !STR_4_strlen!
  474.     )
  475.  
  476.     call :STRLEN_count
  477.     echo\:: restituisce la variabile
  478.     echo\:: my_STR_length=%_STR_length%
  479.     echo\::
  480.  
  481.     :STRLEN_count
  482.     if not "%0"==":STRLEN_count" goto :STRLEN_count_end
  483.         set /a len=0
  484.         :STRLEN_count_loop
  485.             if not "!STR_4_strlen:~%len%!"=="" set /a len+=1 & goto :STRLEN_count_loop
  486.             set _STR_length=%len%
  487.     goto :EOF
  488.     :STRLEN_count_end
  489. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  490.     echo\::::::::::::::::::::::::::::::::::::::::
  491.     echo\::%MSG:§=!LF!::%
  492.     call :FOOTER
  493.     (
  494.         endlocal
  495.         set "my_STR_length=%_STR_length%"
  496.         exit /b %ERROR%
  497.     )
  498. :strlen_end
  499. :::::::::::::: STRLEN end ::::::::::::::::::::::::::::::::::::::::::
  500. :::::::::::::: STRLEN end ::::::::::::::::::::::::::::::::::::::::::
  501.  
  502.  
  503. :::::::::::::: NIC ::::::::::::::::::::::::::::::::::::::::::::::
  504. :::::::::::::: NIC ::::::::::::::::::::::::::::::::::::::::::::::
  505. goto :nic_end
  506. :NIC
  507. REM setlocal enabledelayedexpansion
  508. :NIC_sos
  509.     if not "%~0"==":NIC_sos" goto :NIC_sos_end
  510.         echo\::* %THIS_file% %C__%%~1%C_0% .
  511.         echo\::
  512.         echo\:: per ogni scheda di rete con IP restituisce
  513.         echo\:: alcuni utili valori
  514.     exit /b %ERROR%
  515. :NIC_sos_end
  516. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  517. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  518. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  519. :::: esempio di comando per info su Wi-Fi
  520. ::::   Netsh WLAN show interfaces
  521. :::: visualizza la passwd della commessione Wi-Fi
  522. ::::    netsh wlan show profile name="NOME-PROFILO" key=clear
  523. :::: esempio di risposta al comando:
  524. ::::   wmic nic where "netenabled=true" get /format:list
  525. ::::   da qui prendo il valore
  526. ::::   index, macaddress, netconnectionid, speed
  527. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  528. :::: AdapterType=Ethernet 802.3
  529. :::: AdapterTypeId=0
  530. :::: AutoSense=
  531. :::: Availability=3
  532. :::: Caption=[00000008] TP-Link Wireless USB Adapter
  533. :::: ConfigManagerErrorCode=0
  534. :::: ConfigManagerUserConfig=FALSE
  535. :::: CreationClassName=Win32_NetworkAdapter
  536. :::: Description=TP-Link Wireless USB Adapter
  537. :::: DeviceID=8
  538. :::: ErrorCleared=
  539. :::: ErrorDescription=
  540. :::: GUID={E8C2B227-0E77-4C38-B35F-46A3C86EBD52}
  541. :::: Index=8
  542. :::: InstallDate=
  543. :::: Installed=TRUE
  544. :::: InterfaceIndex=23
  545. :::: LastErrorCode=
  546. :::: MACAddress=D0:37:45:94:14:58
  547. :::: Manufacturer=Realtek Semiconductor Corp.
  548. :::: MaxNumberControlled=0
  549. :::: MaxSpeed=
  550. :::: Name=TP-Link Wireless USB Adapter
  551. :::: NetConnectionID=Wi-Fi
  552. :::: NetConnectionStatus=2
  553. :::: NetEnabled=TRUE
  554. :::: NetworkAddresses=
  555. :::: PermanentAddress=
  556. :::: PhysicalAdapter=TRUE
  557. :::: PNPDeviceID=USB\VID_2357&amp;PID_011F\00E04C000001
  558. :::: PowerManagementCapabilities=
  559. :::: PowerManagementSupported=FALSE
  560. :::: ProductName=TP-Link Wireless USB Adapter
  561. :::: ServiceName=RtlWlanu
  562. :::: Speed=120000000
  563. :::: Status=
  564. :::: StatusInfo=
  565. :::: SystemCreationClassName=Win32_ComputerSystem
  566. :::: SystemName=HP1864
  567. :::: TimeOfLastReset=20240516075523.500000+120
  568. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  569.     for /f "tokens=1,2 delims=^= " %%a in ('wmic nic where "netenabled=true" get /format:list 2^>nul') do (
  570.         set "Xa="
  571.         set "Xb="
  572.         set "Xa=%%a"
  573.         set "Xb=%%b"
  574.         if defined Xb (
  575.             if /i "%%a" == "index" (
  576.                 set  /a N_nic+=1
  577.                 set "_NIC_!N_nic!_%%a=%%b"
  578.             )
  579.             if /i "%%a" == "macaddress" (
  580.                 set "_NIC_!N_nic!_%%a=%%b"
  581.             )
  582.             if /i "%%a" == "netconnectionid" (
  583.                 REM Ethernet - Wi-Fi ....
  584.                 set "_NIC_!N_nic!_%%a=%%b"
  585.             )
  586.             if /i "%%a" == "speed" (
  587.                 set "_NIC_!N_nic!_%%a=%%b"
  588.             )
  589.         )
  590.     )
  591. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  592. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  593. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  594.     if not defined N_nic (
  595.         set "ERROR_no_nic=NO NIC-Network Interface Controller- con IP"
  596.         echo\::
  597.         echo\::  no nic -Network Interface Controller-
  598.         echo\::  nessuna scheda abilitata con IP
  599.         echo\::
  600.         call :FOOTER
  601.         exit /b %ERROR%
  602.     )
  603. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  604. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  605. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  606. :::: esempio di risposta al comando:
  607. ::::     wmic nicconfig where (index="!INDEX_N!" and macaddress="!MAC_N!") get %SEARC_NIC_PROPERTY% /format:list"
  608. :::: Visualizza tutte le proprietà
  609. ::::     wmic nicconfig where IPEnabled=TRUE get /format:list
  610. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  611. :::: ArpAlwaysSourceRoute=
  612. :::: ArpUseEtherSNAP=
  613. :::: Caption=[00000012] Realtek USB GbE Family Controller
  614. :::: DatabasePath=%SystemRoot%\System32\drivers\etc
  615. :::: DeadGWDetectEnabled=
  616. :::: DefaultIPGateway={"172.28.0.1"}
  617. :::: DefaultTOS=
  618. :::: DefaultTTL=
  619. :::: Description=Realtek USB GbE Family Controller
  620. :::: DHCPEnabled=TRUE
  621. :::: DHCPLeaseExpires=20240516112847.000000+120
  622. :::: DHCPLeaseObtained=20240516085207.000000+120
  623. :::: DHCPServer=172.28.0.1
  624. :::: DNSDomain=lanpareto
  625. :::: DNSDomainSuffixSearchOrder={"lanpareto"}
  626. :::: DNSEnabledForWINSResolution=FALSE
  627. :::: DNSHostName=hp1864
  628. :::: DNSServerSearchOrder={"172.28.0.1"}
  629. :::: DomainDNSRegistrationEnabled=FALSE
  630. :::: ForwardBufferMemory=
  631. :::: FullDNSRegistrationEnabled=TRUE
  632. :::: GatewayCostMetric={0}
  633. :::: IGMPLevel=
  634. :::: Index=12
  635. :::: InterfaceIndex=14
  636. :::: IPAddress={"172.28.5.214","fe80::7e5:2359:2836:5bcb"}
  637. :::: IPConnectionMetric=25
  638. :::: IPEnabled=TRUE
  639. :::: IPFilterSecurityEnabled=FALSE
  640. :::: IPPortSecurityEnabled=
  641. :::: IPSecPermitIPProtocols={}
  642. :::: IPSecPermitTCPPorts={}
  643. :::: IPSecPermitUDPPorts={}
  644. :::: IPSubnet={"255.255.0.0","64"}
  645. :::: IPUseZeroBroadcast=
  646. :::: IPXAddress=
  647. :::: IPXEnabled=
  648. :::: IPXFrameType=
  649. :::: IPXMediaType=
  650. :::: IPXNetworkNumber=
  651. :::: IPXVirtualNetNumber=
  652. :::: KeepAliveInterval=
  653. :::: KeepAliveTime=
  654. :::: MACAddress=00:E0:4C:68:B7:3D
  655. :::: MTU=
  656. :::: NumForwardPackets=
  657. :::: PMTUBHDetectEnabled=
  658. :::: PMTUDiscoveryEnabled=
  659. :::: ServiceName=rtux64w10
  660. :::: SettingID={9D499C5D-EA64-4740-BC3B-B82065415004}
  661. :::: TcpipNetbiosOptions=0
  662. :::: TcpMaxConnectRetransmissions=
  663. :::: TcpMaxDataRetransmissions=
  664. :::: TcpNumConnections=
  665. :::: TcpUseRFC1122UrgentPointer=
  666. :::: TcpWindowSize=
  667. :::: WINSEnableLMHostsLookup=TRUE
  668. :::: WINSHostLookupFile=
  669. :::: WINSPrimaryServer=172.28.0.1
  670. :::: WINSScopeID=
  671. :::: WINSSecondaryServer=
  672. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  673.     set "SEARC_NIC_PROPERTY=DefaultIPGateway^,Description"
  674.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DHCPEnabled"
  675.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DHCPServer"
  676.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DNSDomain"
  677.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DNSDomainSuffixSearchOrder"
  678.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DNSHostName"
  679.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,DNSServerSearchOrder"
  680.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,IPAddress"
  681.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,IPConnectionMetric"
  682.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,IPSubnet"
  683.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,MACAddress"
  684.     REM Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{SettingID}
  685.     set "SEARC_NIC_PROPERTY=%SEARC_NIC_PROPERTY%^,SettingID"
  686.  
  687.     echo\:: Network-Interface-Controller
  688.     echo\:: %N_nic% NIC con ip assegnato
  689. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  690. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  691. :::: Visualizza tutte le proprietà
  692. ::::    wmic nicconfig where IPEnabled=TRUE get /format:list
  693. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  694.     for /L %%a in (1,1,%N_nic%) do (
  695.         set "INDEX_N="
  696.         set "MAC_N="
  697.         set "INDEX_N=!_NIC_%%a_index!"
  698.         set "MAC_N=!_NIC_%%a_macaddress!"
  699.         for /f "tokens=1,2 delims=^=" %%A in ('"wmic nicconfig where (index="!INDEX_N!" and macaddress="!MAC_N!") get %SEARC_NIC_PROPERTY% /format:list"') do (
  700.             set "Y_A="
  701.             set "Y_B="
  702.             set "Y_A=%%A"
  703.             set "Y_B=%%B"
  704.             if defined Y_B (
  705.                 set "Y_B=!Y_B:{=!"
  706.                 set "Y_B=!Y_B:}=!"
  707.                 set "Y_B=!Y_B:"=!"
  708.                 set "Y_B=!Y_B:,=-!"
  709.                 set "_NIC_%%a_!Y_A!=!Y_B!"
  710.             )
  711.         )
  712.         for /f "tokens=1,2 delims=^=" %%T in ('set _NIC_%%a') do (
  713.             set "T=%%T"
  714.             set "T=!T:_NIC_%%a_=!"
  715.             if /i not  "!T!" == "index" (
  716.                 call :NIC_all_property %%a "!T!=%%U"
  717.                 set "_NIC_%%a_index="
  718.             )
  719.         )
  720.     )
  721. :NIC_all_property
  722.     if not "%0" == ":NIC_all_property" goto :NIC_all_property_end
  723.         set "X2=%~2"
  724.         set "_NIC_%1_all_property="!X2!" !_NIC_%1_all_property!"
  725.     goto :EOF
  726. :NIC_all_property_end
  727. ::::::::::::::::::::::::::::::::::::::::
  728. ::::::::::::::::::::::::::::::::::::::::
  729.  
  730. ::::::::::::::::::::::::::::::::::::::::
  731. ::::::::::::::::::::::::::::::::::::::::
  732.     echo\::::::::::::::::::::::::::::::::::::::::
  733.     for /f "tokens=*" %%L in ('set _NIC_') do (
  734.         echo\%%L | findstr /r /c:"_NIC_[0-9]*_all_property" >nul
  735.         if !errorlevel! EQU 0 (
  736.             set "DUMMY_nic_prop=%%L"
  737.             set "DUMMY_nic_prop=!DUMMY_nic_prop:"='!
  738.             call :NIC_all_prop_split "!DUMMY_nic_prop!"
  739.         ) else (
  740.             echo\::  my%%L
  741.         )
  742.     )
  743. :NIC_all_prop_split
  744.     if not "%0" == ":NIC_all_prop_split" goto :NIC_all_prop_split_end
  745.         set "K="
  746.         set "K=%~1"
  747.         set "K=!K:' '=§!"
  748.         set "K=!K:'="!"
  749.         echo\::my%K:§=!LF!::           %
  750.     goto :EOF
  751. :NIC_all_prop_split_end
  752. ::::::::::::::::::::::::::::::::::::::::
  753. ::::::::::::::::::::::::::::::::::::::::
  754.  
  755.  
  756.     echo\::::::::::::::::::::::::::::::::::::::::
  757.     echo\:: %N_nic% NIC con ip asegnato
  758.     echo\::%MSG:§=!LF!::%
  759.     call :FOOTER
  760.     set "N="
  761.     for /f "tokens=*" %%G in ('set _NIC_') do (
  762.         REM echo\@@@@@@@ G==%%G
  763.         set /a N+=1
  764.         REM echo N==!N!
  765.         REM if "!N!" EQU "1" endlocal & endlocal
  766.         if "!N!" EQU "1" endlocal
  767.         REM echo\@1@1@1@ G==%%G
  768.         set "my%%G"
  769.     )
  770.     exit /b 0
  771. :nic_end
  772. :::::::::::::: NIC end ::::::::::::::::::::::::::::::::::::::::::
  773. :::::::::::::: NIC end ::::::::::::::::::::::::::::::::::::::::::
  774. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  775.  
  776.  
  777. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  778. :::::::::::::: run_as_admin ::::::::::::::::::::::::::::::::::::::::::::::
  779. :::::::::::::: run_as_admin ::::::::::::::::::::::::::::::::::::::::::::::
  780. goto :run_as_admin_end
  781. :run_as_admin
  782. :RUN_AS_ADMIN_sos
  783. if not "%~0"==":RUN_AS_ADMIN_sos" goto :run_as_admin_sos_end
  784.     echo\::* %THIS_file% %C__%%~1%C_0% . & REM %2 .
  785.     echo\::
  786.     echo\::  %%2="path al file da eseguire come Administrators"
  787.     echo\::  %%3="eventuali parametri da passare"
  788.     echo\::  Spazi vuoti devono essere racchiusi tra " "
  789.     echo\::  Esempio:
  790.     echo\:: %THIS_file% %1 %%comspec%%
  791.     echo\::   esegue %C__%%comspec%%C_0% con permessi elevati
  792.     echo\:: %THIS_file% %1 "c:\my dir\my file.exe" "parametro_1 parametro_2"
  793.     echo\::   esegue %C__%"c:\my dir\my file.exe" parametro_1 parametro_2%C_0% con permessi elevati
  794.         if "%2"=="NO_CMDOW_exe" (
  795.         echo\::---------------------
  796.         echo\:: %C__%%~1%C_0% funziona con %C__%cmdow.exe%C_0% . ^(funziona anche con powershell^)
  797.         echo\::  CMDOW [Version 1.4.8] Win32 Commandline Window Utility for NT4/2000/XP/7.
  798.         echo\::  ^(C^) Copyright 2001-2014 Ritchie Lawrence, http://www.commandline.co.uk.
  799.         echo\::  https://github.com/ritchielawrence/cmdow/
  800.         echo\::  https://ritchielawrence.github.io/cmdow/
  801.         echo\:: Download: https://github.com/ritchielawrence/cmdow/blob/master/bin/Release/cmdow.exe
  802.         echo\::
  803.         echo\:: Molti anrivirus individuano cmdow.exe come virus perchè legge ed elabora
  804.         echo\::  informazioni che %C__%$%C_0%windows%C__%$%C_0% non accetta. Non è vero.
  805.         echo\::-OPEN-SOURCE "MIT license" garantisce ciò che cmdow.exe elabora.
  806.         echo\:: Istruisci il tuo antivirus a considerare cmdow.exe un programma sano.
  807.         echo\::  https://github.com/ritchielawrence/cmdow?tab=readme-ov-file#is-cmdow-malware
  808.         echo\::::::::::::::::::::::::::::::::::::::::
  809.     )
  810.     exit /b %ERROR%
  811. :run_as_admin_sos_end
  812.  
  813. :: https://ss64.com/vb/syntax-elevate.html
  814.  
  815. if "%~2"§==""§ (
  816.     set "ERROR_run_as_admin_P2=Parametro 2 nul"
  817.     echo\::
  818.     echo\:: "%~1" Richiesto un percorso completo ad un file
  819.     echo\::  da eseguire in una consolle con privilegi elevati.
  820.     echo\::  Se contiene spazi racchiudere tra " "
  821.     echo\::
  822.     call :FOOTER
  823.     exit /b %ERROR%
  824. )
  825.  
  826. if exist "%~f2" (
  827.     if "%~x2"§==""§ (
  828.         set "ERROR_run_as_admin_P2=Parametro 2.NO_estensione"
  829.         echo\::
  830.         echo\:: Richiesto un percorso completo ad un file compreso l'estensione
  831.         echo\:: "%~2".NO_estensione??
  832.         echo\::  se contiene spazi racchiudere tra " "
  833.         echo\::
  834.         call :FOOTER
  835.         exit /b %ERROR%
  836.     )
  837.  
  838.     echo\%~f2| findstr /r /c:".*[ ].*" >nul 2>&1
  839.         if !errorlevel! EQU 0 (
  840.             set "_EXE_this=%~sdpnx2"
  841.         ) else (
  842.             set "_EXE_this=%~f2"
  843.         )
  844. )
  845.  
  846. if not defined _EXE_this (
  847.     set "ERROR_run_as_admin_P2=Parametro 2 "%~2" "
  848.     echo\::
  849.     echo\:: "%1" Richiesto un percorso completo ad un file
  850.     echo\::  da eseguire con permessi elevati "gruppo Administrators"
  851.     echo\::  Se contiene spazi racchiudere tra " "
  852.     echo\::
  853.     call :FOOTER
  854.     exit /b %ERROR%
  855. )
  856.  
  857. set "_EXE3="
  858. set "Xn="
  859.  
  860. shift /1
  861. :loop_p3
  862. shift /1
  863. set "Xn=%~1"
  864. if defined Xn (
  865.     if exist "%Xn%" (
  866.         echo\%Xn%| findstr /r /c:".*[ ].*" >nul 2>&1
  867.         REM se trovo spazi vuoti trasformo in nome breve
  868.         if !errorlevel! EQU 0 (
  869.             set "_EXE3=!_EXE3! %~sdpnx1 "
  870.         ) else (
  871.             set "_EXE3=!_EXE3! %~1 "
  872.         )
  873.     ) else (
  874.         set _EXE3=!_EXE3! %~1
  875.     )
  876.     REM echo\@@!_EXE3!
  877.     set "Xn="
  878.     goto :loop_p3
  879. )
  880.  
  881. REM https://ss64.com/vb/shellexecute.html
  882.      REM OK .ShellExecute "application", "parameters", "dir", "verb", window
  883.      REM NO .ShellExecute 'some program.exe', '"some parameters with spaces"', , "runas", 1
  884. set "RUN_AS_ADMIN_time=%time: =0%"
  885. set "RUN_AS_ADMIN_time=%RUN_AS_ADMIN_time::=%"
  886. set "RUN_AS_ADMIN_time=%RUN_AS_ADMIN_time:.=%"
  887. set "RUN_AS_ADMIN_time=%RUN_AS_ADMIN_time:,=%"
  888. REM https://ss64.com/nt/syntax-random.html
  889. REM set /a RUN_AS_ADMIN_random=(%random%*1000/32768+1000)
  890. set /a "RUN_AS_ADMIN_random=(%random%*100/32768+100)"
  891. set "RUN_AS_ADMIN_win_title=%THIS_file_pid%-%RUN_AS_ADMIN_time%-%RUN_AS_ADMIN_random%"
  892.  
  893. set "_CMD=%comspec%"
  894. set "_EXE_FULL=%_EXE_this% %_EXE3%"
  895. set "_VBS=%temp%\dummy.vbs"
  896. set "_OUT_cmd=%temp%\dummy.cmd"
  897. if exist "%_VBS%" del /q /f "%_VBS%"
  898. if exist "%_OUT_cmd%" del /q /f "%_OUT_cmd%"
  899.  
  900. ::::::::::::::
  901. :::::: file per dare risposta nella consolle elevata
  902. ::::::::::::::
  903. echo\@echo off ^& setlocal                                               > %_OUT_cmd%
  904. echo\title %RUN_AS_ADMIN_win_title% "%username%" chiama "%%username%%"  >> %_OUT_cmd%
  905. echo\if "%%1"=="start" ^(                                               >> %_OUT_cmd%
  906. echo\   set "dummy_time_start=start %%date%% %%time: =0%%"              >> %_OUT_cmd%
  907. echo\   set "dummy_act=esegue"                                          >> %_OUT_cmd%
  908. echo\   set "dummy_call=chiama"                                         >> %_OUT_cmd%
  909. echo\^)                                                                 >> %_OUT_cmd%
  910. echo\if "%%1"=="end" ^(                                                 >> %_OUT_cmd%
  911. echo\   set "dummy_time_end=end   %%date%% %%time: =0%%"                >> %_OUT_cmd%
  912. echo\   set "dummy_act=ha eseguito"                                     >> %_OUT_cmd%
  913. echo\   set "dummy_call=ha chiamato"                                    >> %_OUT_cmd%
  914. echo\^)                                                                 >> %_OUT_cmd%
  915. echo\if "%%1"=="end" ^(                                                 >> %_OUT_cmd%
  916. echo\   echo\::--- %%dummy_time_end%% --------                          >> %_OUT_cmd%
  917. echo\^)                                                                 >> %_OUT_cmd%
  918. echo\if "%%1"=="start" echo\:::::::::::::::::                           >> %_OUT_cmd%
  919. echo\echo\:: "%username%" %%dummy_call%% "%%username%%"                 >> %_OUT_cmd%
  920. echo\echo\::  utente "%%username%%" consolle con permessi elevati       >> %_OUT_cmd%
  921. echo\echo\:: "%%username%%" %%dummy_act%%:                              >> %_OUT_cmd%
  922. echo\echo\::   %_EXE_this%                                              >> %_OUT_cmd%
  923. if defined _EXE3 echo\echo\::    %_EXE3%                                >> %_OUT_cmd%
  924. echo\if "%%1"=="start" ^(                                               >> %_OUT_cmd%
  925. echo\   echo\::--- %%dummy_time_start%% --------                        >> %_OUT_cmd%
  926. echo\   echo\:: %_EXE_this%                                             >> %_OUT_cmd%
  927. if defined _EXE3 echoecho\::  %_EXE3%                                >> %_OUT_cmd%
  928. echo\^)                                                                 >> %_OUT_cmd%
  929. echo\if "%%1"=="end" echo\:::::::::::::::::                             >> %_OUT_cmd%
  930. echo\if defined dummy_time_end set "dummy_time_start="                  >> %_OUT_cmd%
  931. echo\endlocal ^& set "dummy_time_start=%%dummy_time_start%%"            >> %_OUT_cmd%
  932. ::::::::::::::
  933. :::::: fine file per dare risposta nella consolle elevata
  934. ::::::::::::::
  935.  
  936. echo Set UAC = CreateObject^("Shell.Application"^) > "%_VBS%"
  937. echo UAC.ShellExecute "%_CMD%"," /K title %RUN_AS_ADMIN_win_title% & cd /d %cd% & call %_OUT_cmd% start & %_EXE_FULL% & call %_OUT_cmd% end & set dummy_time_start=", "%cd%", "runas", 1 >> "%_VBS%"
  938. cscript //nologo %_VBS%
  939. if defined CMDOW_exeQ (
  940.     %CMDOW_exe% /p /f | findstr /r /c:".*%RUN_AS_ADMIN_win_title%" >nul 2>&1
  941. ) else (
  942.     powershell "Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle" ^
  943.     | findstr /r /c:".*%RUN_AS_ADMIN_win_title%.*" >nul 2>&1
  944. )
  945. if %errorlevel% EQU 0 (
  946.     echo\::
  947.     echo\:: "%username%" chiede una consolle con permessi elevati
  948.     echo\::  per eseguire %_EXE_this%
  949.     if defined _EXE3 echo\::               %_EXE3%
  950.     echo\::  CONSOLLE "%RUN_AS_ADMIN_win_title%" APERTA
  951.     echo\::
  952.     REM echo\::::::::::::::::::::::::::::::::::::::::
  953.     REM echo\::%MSG:§=!LF!::%
  954.     call :FOOTER
  955.  
  956. ) else (
  957.     set "ERROR_run_as_admin_NO=UAC richiesta non valida"
  958.     echo\::
  959.     echo\:: CONSOLLE RIFIUTATA
  960.     echo\:: "%username%" !ERROR_run_as_admin_NO!
  961.     echo\::  comando UAC %_EXE_this%
  962.     if defined _EXE3 echo\::   parametri: %_EXE3% .
  963.     echo\::
  964.     echo\:: autenticazione??? ERRORE bla bla bla
  965.     echo\::
  966.     call :FOOTER
  967.     exit /b %ERROR%
  968. )
  969. :run_as_admin_end
  970. :::::::::::::: function end ::::::::::::::::::::::::::::::::::::::::::
  971. :::::::::::::: function end ::::::::::::::::::::::::::::::::::::::::::
  972. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  973.  
  974.  
  975. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  976. :::::::::::::: user_is_admin ::::::::::::::::::::::::::::::::::::::::::::::
  977. :::::::::::::: user_is_admin ::::::::::::::::::::::::::::::::::::::::::::::
  978. goto :user_is_admin_end
  979. :user_is_admin
  980. REM setlocal enabledelayedexpansion
  981. :USER_IS_ADMIN_sos
  982. if not "%~0"==":USER_IS_ADMIN_sos" goto :user_is_admin_sos_end
  983.     echo\::* %THIS_file% %C__%%~1%C_0% .
  984.     echo\::
  985.     echo\::  Controlla su questo computer "%computername%"
  986.     echo\::  se l'utente locale "%username%" che esegue questo script
  987.     echo\::  fa parte del gruppo locale "Users" oppure "Administrators"
  988.     echo\::
  989.     echo\::  Restituisce la var "my_USER_IS" valorizzata
  990.     echo\::  con il gruppo di appartenenza
  991.     exit /b %ERROR%
  992. :user_is_admin_sos_end
  993.  
  994.     net session /list >nul 2>&1
  995.     set "is_admin=%errorlevel%"
  996.     set "my_USER_IS="
  997.     if %is_admin% EQU 0 (
  998.         for /f "delims=* tokens=1,2*" %%A in ('net user %username% ^| findstr /i /r /x /c:"^.*[*]Administrators.*"')  do (
  999.             if !errorlevel! EQU 0 (
  1000.                 set "my_USER_IS=%%B"
  1001.             )
  1002.         )
  1003.     )
  1004.     if %is_admin% GEQ 1 (
  1005.         for /f "delims=* tokens=1,2*" %%A in ('net user %username% ^| findstr /i /r /x /c:"^.*[*]Users.*"')  do (
  1006.             if !errorlevel! EQU 0 (
  1007.                 set "my_USER_IS=%%B"
  1008.             )
  1009.         )
  1010.     )
  1011.     if not defined my_USER_IS (
  1012.         set ERROR_USER_IS=%username% non é nel gruppo "*Users", non é nel gruppo "*Administrators"
  1013.         echo\::
  1014.         echo\::  %username% non é nel gruppo "*Users", non é nel gruppo "*Administrators"
  1015.         echo\::
  1016.         call :FOOTER
  1017.         exit /b %ERROR%
  1018.     )
  1019.  
  1020.     echo\:: utente locale "%username%" di questo host "%computername%"
  1021.     echo\:: gruppo locale "%my_USER_IS: =%"
  1022.     echo\:: valore restituito
  1023.     echo\::   %%my_USER_IS%%==%my_USER_IS: =%
  1024.     echo\::::::::::::::::::::::::::::::::::::::::
  1025.     echo\::%MSG:§=!LF!::%
  1026.     call :FOOTER
  1027.     (
  1028.         REM endlocal & endlocal
  1029.         endlocal
  1030.         set my_USER_IS=%my_USER_IS: =%
  1031.     )
  1032.  
  1033. :user_is_admin_end
  1034. :::::::::::::: user_is_admin end ::::::::::::::::::::::::::::::::::::::::::
  1035. :::::::::::::: user_is_admin end ::::::::::::::::::::::::::::::::::::::::::
  1036. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1037.  
  1038.  
  1039.  
  1040. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1041. :::::::::::::: my_geoip start :::::::::::::::::::::::::::::::::::::::::::
  1042. :::::::::::::: my_geoip start :::::::::::::::::::::::::::::::::::::::::::
  1043. goto :geoip_end
  1044. :geoip
  1045. REM setlocal enabledelayedexpansion
  1046. :GEOIP_sos
  1047. if not "%~0"==":GEOIP_sos" goto :geoip_sos_end
  1048.     echo\::* %THIS_file% %C__%%~1%C_0% .
  1049.     echo\::
  1050.     echo\::  Utilizza "curl.exe" per interrogare il servizio
  1051.     echo\::  web "http://ip-api.com/json/?fields=66846719"
  1052.     echo\:: -Se come parametro si aggiunge un indirizzo "IP"
  1053.     echo\::  oppure un nome a "DNS" vengono restituiti i valori
  1054.     echo\::  per il l'indirizzo.
  1055.     echo\:: -Se non è specificato un'indirizzo i valori restituiti
  1056.     echo\::  si riferiscono alla connessione internet in uso.
  1057.     echo\:: -Esempio:
  1058.     echo\::* %THIS_file% %1
  1059.     echo\::   restituisce i valori per la connessione internet in uso.
  1060.     echo\::* %THIS_file% %1 8.8.8.8
  1061.     echo\::   restituisce i valori per l'indirizzo IP "8.8.8.8"
  1062.     echo\::   il DNS pubblico di google
  1063.     echo\::* %THIS_file% %1 208.67.222.222
  1064.     echo\::   restituisce i valori per l'indirizzo IP "208.67.222.222"
  1065.     echo\::   il DNS pubblico di Cisco
  1066.     exit /b %ERROR%
  1067. :geoip_sos_end
  1068.  
  1069.     if exist "%~dp0curl.exe" (
  1070.         echo\:: "%~dp0curl.exe"
  1071.         set "CURL_exe=%~dp0curl.exe"
  1072.     )
  1073.     if not defined CURL_exe (
  1074.         if exist "%windir%\system32\curl.exe" (
  1075.             REM echo\:: "%windir%\system32\curl.exe"
  1076.             REM :::: "%windir%\system32" è un percorso in %path%
  1077.             set "CURL_exe=curl.exe"
  1078.         )
  1079.     )
  1080.     if not defined CURL_exe (
  1081.         set "ERROR_geoip=MANCA "curl.exe""
  1082.         echo\::
  1083.         echo\:: manca curl.exe
  1084.         echo\::
  1085.         call :FOOTER
  1086.         exit /b %ERROR%
  1087.     )
  1088.     REM trova %computername% ip4
  1089.     REM set "FIND_ip4=[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*"
  1090.     REM ping -a -n 1 -4 %computername% | findstr /i /r /c:".*%computername%.*[%FIND_ip4%]" & echo error==%errorlevel%
  1091.  
  1092.     REM trova localhost [::1*
  1093.     REM ping -a -n 1 -6 %computername% | findstr /i /r /c:".*%computername%[ *[:1]*" & echo %errorlevel%
  1094.  
  1095.     REM ping -a -n 1 -6 %computername% | findstr /i /r /c:".*%computername%[ *[fe80:]*" & echo %errorlevel%
  1096.     REM trova connetività su internet
  1097.     REM ping -a -n 1 gnu.org | findstr /i /r /c:".*[[][0-9:].*" & echo %errorlevel%
  1098.  
  1099.     set "PING_this_2=gnu.org"
  1100.     set "PING_this_1=ip-api.com"
  1101.     set "PING_this=%PING_this_1%"
  1102.     REM ping -a -n 1 %PING_this% | findstr /i /r /c:".*[[][0-9:].*" >nul
  1103.     REM for /f "tokens=1,2 delims=^=" %%A in ( 'set PING_this_' ) do (
  1104.         REM ping -a -n 1 %%B >nul
  1105.         REM if !errorlevel! GTR 0 (
  1106.             REM set "ERROR_geoip_no_internet=connessione a internet non disponibile"
  1107.             REM set "NO_PING_this=%%B"
  1108.         REM )
  1109.         REM if !errorlevel! EQU 0 (
  1110.             REM set "ERROR_geoip_no_internet="
  1111.             REM set "NO_PING_this="
  1112.         REM )
  1113.         REM if defined ERROR_geoip_no_internet (
  1114.             REM ping -a -n 1 %%B >nul
  1115.             REM if !errorlevel! GTR 0 (
  1116.                 REM set "ERROR_geoip_no_internet=connessione a internet non disponibile"
  1117.                 REM set "NO_PING_this=%%B"
  1118.             REM )
  1119.         REM )
  1120.     REM )
  1121.     REM if defined NO_PING_this (
  1122.         REM echo\::
  1123.         REM echo\:: connessione a internet non disponibile
  1124.         REM echo\:: [ping -a -n 1 %NO_PING_this%] senza risposta
  1125.         REM echo\::
  1126.         REM call :FOOTER
  1127.         REM exit /b %ERROR%
  1128.     REM )
  1129.     ping -a -n 1 -f %PING_this% >nul
  1130.     if %errorlevel% GTR 0 (
  1131.         set "ERROR_geoip_no_internet=connessione a internet non disponibile"
  1132.         echo\::
  1133.         echo\:: connessione a internet non disponibile
  1134.         echo\:: [ping -a -n 1 -l 8 -f -w 128 %PING_this%] senza risposta
  1135.         echo\::
  1136.         call :FOOTER
  1137.         exit /b %ERROR%
  1138.     )
  1139.  
  1140.     :::: REM https://ip-api.com/docs/api:json
  1141.     :::: set "FIELDS=status,message,"
  1142.     :::: set "FIELDS=%FIELDS%continent,continentCode,country,countryCode,region,"
  1143.     :::: set "FIELDS=%FIELDS%regionName,city,district,zip,lat,lon,timezone,offset,currency,"
  1144.     :::: set "FIELDS=%FIELDS%isp,org,as,asname,reverse,mobile,proxy,hosting,query"
  1145.     set "FIELDS=66846719"
  1146.  
  1147.     set "ADDRESS=%~2"
  1148.     set "GEO_IP_API=http://ip-api.com/json/%ADDRESS%?fields=%FIELDS%"
  1149.     REM set "CURL_exe=%CURL_exe% -v -s -S -k -L --retry 1 -A "%THIS_file:~0,-4%""
  1150.     set "CURL_exe=%CURL_exe% -s -S -k -L --retry 1 -A "%THIS_file:~0,-4% %THIS_file_pid%""
  1151.     echo\:: %CURL_EXE% %GEO_IP_API%
  1152.     echo\:: valori restituiti:... .. .
  1153.     ::::::::::::
  1154.     for /f "tokens=*" %%A in ( '"%CURL_exe% %GEO_IP_API%"' ) do (
  1155.         REM if !errorlevel! GTR 0 (
  1156.             REM set "ERROR_geoip_curl=errore curl"
  1157.             REM echo\::
  1158.             REM echo\:: errore curl
  1159.             REM echo\::
  1160.             REM call :FOOTER
  1161.             REM exit /b %ERROR%
  1162.         REM )
  1163.         REM echo\ A="%%~A"
  1164.         set "geo_ip=%%~A"
  1165.         set "geo_ip=!geo_ip:{=!"
  1166.         set "geo_ip=!geo_ip:}=!"
  1167.         set "geo_ip=!geo_ip:":==!"
  1168.         set "geo_ip=!geo_ip:"=!"
  1169.         set "geo_ip=!geo_ip:, =##!"
  1170.     )
  1171.     REM echo\ ---- GEO_IP ----
  1172.     REM echo\%geo_ip:,=!lf!%
  1173.     for /f "tokens=1,2 delims=^=" %%a in ( "%geo_ip:,=!LF!%" ) do (
  1174.         set "A=%%a"
  1175.         set "B=%%b"
  1176.         if defined TR_exe (
  1177.             for /f "tokens=*" %%Z in ( 'echo\!A!^|"%TR_exe%" [:lower:] [:upper:]') do (
  1178.                 set "A=%%Z"
  1179.             )
  1180.         )
  1181.         if /i "!A!"=="status" (
  1182.             if "!B!"=="fail" (
  1183.                 set "ERROR_geoip_status=ip-api.com errore !B!"
  1184.             )
  1185.         )
  1186.         if defined ERROR_geoip_status (
  1187.             if "!B!" NEQ "fail" set "ERROR_geoip_!A!=ip-api.com errore !B!"
  1188.         )
  1189.         if not defined ERROR_geoip_status (
  1190.             REM if not defined B set "B="""
  1191.             if not defined B set "B=_NUL_"
  1192.             set "_!A!=!B:##=, !"
  1193.         )
  1194.     )
  1195.     set "A="
  1196.     set "B="
  1197.  
  1198.     if defined ERROR_geoip_status (
  1199.         call :FOOTER
  1200.         exit /b %ERROR%
  1201.     )
  1202.  
  1203.     if not defined ADDRESS set "ADDRESS=local_%_query%"
  1204.     echo\::::::::::::::::::::::::::::::::::::::::
  1205.     for /f "tokens=*" %%z in ( 'set _' ) do echo\:: my_%ADDRESS%%%z
  1206.     echo\::::::::::::::::::::::::::::::::::::::::
  1207.     echo\::%MSG:§=!LF!::%
  1208.     call :FOOTER
  1209.     set "N="
  1210.     for /f "tokens=1,2 delims=^=" %%G in ('set _') do (
  1211.         set /a N+=1
  1212.         if !N! EQU 1 (
  1213.             REM endlocal & endlocal
  1214.             endlocal
  1215.         )
  1216.         set "my_%ADDRESS%%%G=%%H"
  1217.     )
  1218.     set "N="
  1219.  
  1220. :geoip_end
  1221. :::::::::::::: my_geoip end ::::::::::::::::::::::::::::::::::::::::::
  1222. :::::::::::::: my_geoip end ::::::::::::::::::::::::::::::::::::::::::
  1223. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1224.  
  1225. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1226. :::::::::::::: my_date ::::::::::::::::::::::::::::::::::::::::::::::::::
  1227. :::::::::::::: my_date ::::::::::::::::::::::::::::::::::::::::::::::::::
  1228. goto :my_date_end
  1229. :my_date
  1230. :MY_DATE_sos
  1231. if not "%~0"==":MY_DATE_sos" goto :my_date_sos_end
  1232.     echo\::* %THIS_file% %C__%%~1%C_0% .
  1233.     echo\::
  1234.     echo\:: restituisce una serie di variabili "my_....."
  1235.     echo\:: che possono essere utili.
  1236.  
  1237.     REM call "%THIS_file_full_path%" my_date >"%temp%\%~1.txt"
  1238.     REM set "N="
  1239.     REM for /f "tokens=*" %%Z in ('type "%temp%\%~1.txt"') do (
  1240.         REM set "Zx=%%Z"
  1241.         REM echo\!Zx! | findstr /x /r /c:"^[:][:][ ][m][y][_].*$" >nul 2>&1
  1242.         REM if !errorlevel! EQU 0 (
  1243.             REM set /a N+=1
  1244.             REM if !N! EQU 1 (
  1245.                 REM echo\::* %THIS_file% %C__%%~1%C_0% .
  1246.                 REM echo\::
  1247.                 REM echo\::  restituisce queste variabili... .. .
  1248.                 REM echo\!Zx!
  1249.             REM ) else (
  1250.                 REM echo\!Zx!
  1251.             REM )
  1252.         REM )
  1253.     REM )
  1254.     REM set "N="
  1255.     REM del /q "%temp%\%~1.txt"
  1256.     exit /b %ERROR%
  1257.  
  1258. :my_date_sos_end
  1259.  
  1260. REM for /f "tokens=1-5 delims= " %%a in ( 'wmic path win32_localtime get day^,dayofweek^,month^,year ^| findstr /R [0-9]' ) do (
  1261.     REM set DAY=%%a
  1262.     REM set DAY_OF_WEEK=%%b
  1263.     REM set MONTH_N=%%c
  1264.     REM set YEAR=%%d
  1265. REM )
  1266. :::: https://superuser.com/questions/331220/wmic-path-what-wmic-class-what
  1267. REM wmic path Win32_TimeZone get /format:list
  1268. REM wmic path Win32_UTCTime get /format:list
  1269.  
  1270.     wmic path win32_localtime get /format:list >nul 2>&1
  1271.     if %errorlevel% EQU 0 (
  1272.         set "COUNT_all_wmic="
  1273.         for /f "tokens=1,2 delims=^=" %%A in ('wmic path win32_localtime get /format:list') do (
  1274.             set /a COUNT_all_wmic+=1
  1275.             REM set "_%%A=%%B"
  1276.             REM REM @echo\ A--[ %%A ] B--[ %%B ]
  1277.             REM set /a COUNT_all+=1
  1278.             set "Ax=%%A"
  1279.             set "Bx=%%B"
  1280.             REM echo\---- 'Ax=!Ax!'  'Bx=!Bx!'
  1281.             REM :::: controllo se !Bx! è vuoto
  1282.             REM :::: Milliseconds= non
  1283.             if not !Bx!dummy==dummy (
  1284.                 REM :::: imposto solo !Bx! con valore
  1285.                 REM echo\:: valore valido !Ax!=!Bx!
  1286.                 set "!Ax!=!Bx!"
  1287.             )
  1288.         )
  1289.     ) else (
  1290.         set "ERROR_win32_localtime=wmic path win32_localtime"
  1291.     )
  1292.  
  1293.     if defined Year (
  1294.         set "_YEAR=%Year%"
  1295.     ) else (
  1296.         set "ERROR_my_date_YEAR=Non trovo l'anno"
  1297.     )
  1298.  
  1299.     if defined Month (
  1300.         if %Month%==1 set "_MONTH_NAME=gennaio"
  1301.         if %Month%==2 set "_MONTH_NAME=febbraio"
  1302.         if %Month%==3 set "_MONTH_NAME=marzo"
  1303.         if %Month%==4 set "_MONTH_NAME=aprile"
  1304.         if %Month%==5 set "_MONTH_NAME=maggio"
  1305.         if %Month%==6 set "_MONTH_NAME=giugno"
  1306.         if %Month%==7 set "_MONTH_NAME=luglio"
  1307.         if %Month%==8 set "_MONTH_NAME=agosto"
  1308.         if %Month%==9 set "_MONTH_NAME=settembre"
  1309.         if %Month%==10 set "_MONTH_NAME=ottobre"
  1310.         if %Month%==11 set "_MONTH_NAME=novembre"
  1311.         if %Month%==12 set "_MONTH_NAME=dicembre"
  1312.         if "%Month:~1,1%"=="" (
  1313.             set "_MONTH_N=0%Month%"
  1314.         ) else (
  1315.             set "_MONTH_N=%Month%"
  1316.         )
  1317.     ) else (
  1318.         set "ERROR_my_date_Month=Non trovo il mese"
  1319.     )
  1320.     if defined DayOfWeek (
  1321.         if %DayOfWeek%==0 set "_DAY_NAME=domenica"
  1322.         if %DayOfWeek%==1 set "_DAY_NAME=lunedì"
  1323.         if %DayOfWeek%==2 set "_DAY_NAME=martedì"
  1324.         if %DayOfWeek%==3 set "_DAY_NAME=mercoledì"
  1325.         if %DayOfWeek%==4 set "_DAY_NAME=giovedì"
  1326.         if %DayOfWeek%==5 set "_DAY_NAME=venerdì"
  1327.         if %DayOfWeek%==6 set "_DAY_NAME=sabato"
  1328.         if %DayOfWeek%==7 set "_DAY_NAME=domenica"
  1329.         if "%DayOfWeek:~1,1%"=="" (
  1330.             set "_DAY_OF_WEEK=0%DayOfWeek%"
  1331.         ) else (
  1332.             set "_DAY_OF_WEEK=%DayOfWeek%"
  1333.         )
  1334.     ) else (
  1335.         set "ERROR_my_date_DayOfWeek=Non trovo il giorno della settimana"
  1336.     )
  1337.     if defined Quarter (
  1338.         set "_QUARTER_IN_YEAR=%Quarter%"
  1339.     ) else (
  1340.         set "ERROR_my_date_QUARTER_IN_YEAR=Non trovo il quadrimestre"
  1341.     )
  1342.     if defined WeekInMonth (
  1343.         set "_WEEK_IN_MONTH=%WeekInMonth%"
  1344.     ) else (
  1345.         set "ERROR_my_date_WEEK_IN_MONTH=Non trovo la settimana nel mese"
  1346.     )
  1347.     if defined Day (
  1348.         if "%Day:~1,1%"=="" (
  1349.             set "_DAY_IN_MONTH=0%Day%"
  1350.         ) else (
  1351.             set "_DAY_IN_MONTH=%Day%"
  1352.         )
  1353.     ) else (
  1354.         set "ERROR_my_date_DAY_IN_MONTH=Non trovo il giorno del mese"
  1355.     )
  1356.  
  1357.     REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1358.     REM wmic path Win32_TimeZone get /format:list
  1359.     REM Bias=60
  1360.     REM Caption=(UTC+01:00) Amsterdam, Berlino, Berna, Roma, Stoccolma, Vienna
  1361.     REM DaylightBias=-60
  1362.     REM DaylightDay=5
  1363.     REM DaylightDayOfWeek=0
  1364.     REM DaylightHour=2
  1365.     REM DaylightMillisecond=0
  1366.     REM DaylightMinute=0
  1367.     REM DaylightMonth=3
  1368.     REM DaylightName=ora legale Europa occidentale
  1369.     REM DaylightSecond=0
  1370.     REM DaylightYear=0
  1371.     REM Description=(UTC+01:00) Amsterdam, Berlino, Berna, Roma, Stoccolma, Vienna
  1372.     REM SettingID=
  1373.     REM StandardBias=0
  1374.     REM StandardDay=5
  1375.     REM StandardDayOfWeek=0
  1376.     REM StandardHour=3
  1377.     REM StandardMillisecond=0
  1378.     REM StandardMinute=0
  1379.     REM StandardMonth=10
  1380.     REM StandardName=ora solare Europa occidentale
  1381.     REM StandardSecond=0
  1382.     REM StandardYear=0
  1383.     REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1384.     wmic path Win32_TimeZone get /format:list >nul 2>&1
  1385.     if %errorlevel% EQU 0 (
  1386.         set "COUNT_all_wmic="
  1387.         REM for /f "tokens=1,2 delims=^=" %%A in ('wmic path Win32_TimeZone get Description /format:list') do (
  1388.         for /f "tokens=1,2 delims=^=" %%A in ('wmic path Win32_TimeZone get /format:list') do (
  1389.             set /a COUNT_all_wmic+=1
  1390.             REM set "_%%A=%%B"
  1391.             REM REM @echo\ A--[ %%A ] B--[ %%B ]
  1392.             REM set /a COUNT_all+=1
  1393.             set "Ax=%%A"
  1394.             set "Bx=%%B"
  1395.             REM echo\---- 'Ax=!Ax!'  'Bx=!Bx!'
  1396.             REM :::: controllo se !Bx! è vuoto
  1397.             REM :::: Milliseconds= non
  1398.             if not !Bx!dummy==dummy (
  1399.                 REM if defined TR_UPPER (
  1400.                     REM for /f "tokens=*" %%Z in ( 'echo\!Ax!^|%TR_UPPER%') do (
  1401.                     REM set "Ax=%%Z"
  1402.                     REM echo\@@@@@@@@@!Ax!
  1403.                     REM )
  1404.                 REM )
  1405.  
  1406.                 REM :::: imposto solo !Bx! con valore
  1407.                 REM echo\:: valore valido !Ax!=!Bx!
  1408.                 set "!Ax!=!Bx!"
  1409.             )
  1410.         )
  1411.     ) else (
  1412.         set "ERROR_Win32_TimeZone=wmic path Win32_TimeZone"
  1413.     )
  1414.     if defined Description (
  1415.         set "_TIME_Description=%Description%"
  1416.     ) else (
  1417.         set "ERROR_TimeZone_Description=non trovo la descrizione di TimeZone"
  1418.     )
  1419.     if defined StandardName (
  1420.         set "_TIME_StandardName=%StandardName%"
  1421.     ) else (
  1422.         set "ERROR_TimeZone_StandardName=non trovo StandardName di TimeZone"
  1423.     )
  1424.     if defined DaylightName (
  1425.         set "_TIME_DaylightName=%DaylightName%"
  1426.     ) else (
  1427.         set "ERROR_TimeZone_DaylightName=non trovo DaylightName di TimeZone"
  1428.     )
  1429.  
  1430.     REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1431.     REM wmic path Win32_UTCTime get /format:list
  1432.     REM Day=4
  1433.     REM DayOfWeek=4
  1434.     REM Hour=12
  1435.     REM Milliseconds=
  1436.     REM Minute=26
  1437.     REM Month=4
  1438.     REM Quarter=2
  1439.     REM Second=7
  1440.     REM WeekInMonth=1
  1441.     REM Year=2024
  1442.     REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1443.     wmic path Win32_UTCTime get /format:list >nul 2>&1
  1444.     if %errorlevel% EQU 0 (
  1445.         set "COUNT_all_wmic="
  1446.         for /f "tokens=1,2 delims=^=" %%A in ('wmic path Win32_UTCTime get /format:list') do (
  1447.             set /a COUNT_all_wmic+=1
  1448.             REM set "_%%A=%%B"
  1449.             REM REM @echo\ A--[ %%A ] B--[ %%B ]
  1450.             REM set /a COUNT_all+=1
  1451.             set "Ax=%%A"
  1452.             set "Bx=%%B"
  1453.             REM echo\---- 'Ax=!Ax!'  'Bx=!Bx!'
  1454.             REM :::: controllo se !Bx! è vuoto
  1455.             if not !Bx!dummy==dummy (
  1456.                 REM :::: imposto solo !Bx! con valore
  1457.                 REM echo\:: valore valido !Ax!=!Bx!
  1458.                 set "!Ax!=!Bx!"
  1459.             )
  1460.         )
  1461.     ) else (
  1462.         set "ERROR_Win32_UTCTime=wmic path Win32_UTCTime"
  1463.     )
  1464.     if defined Day (
  1465.         if "%Day:~1,1%"=="" (
  1466.             set "_UTC_DAY_IN_MONTH=0%Day%"
  1467.         ) else (
  1468.             set "_UTC_DAY_IN_MONTH=%Day%"
  1469.         )
  1470.     )
  1471.     if defined DayOfWeek (
  1472.         if "%DayOfWeek:~1,1%"=="" (
  1473.             set "_UTC_DAY_OF_WEEK=0%DayOfWeek%"
  1474.         ) else (
  1475.             set "_UTC_DAY_OF_WEEK=%DayOfWeek%"
  1476.         )
  1477.     )
  1478.     if defined Month (
  1479.         if "%Month:~1,1%"=="" (
  1480.             set "_UTC_MONTH_N=0%Month%"
  1481.         ) else (
  1482.             set "_UTC_MONTH_N=%Month%"
  1483.         )
  1484.     )
  1485.     if defined Year (
  1486.         set _UTC_YEAR=%Year%
  1487.     )
  1488.     if defined Hour (
  1489.         if "%Hour:~1,1%"=="" (
  1490.             set "_UTC_HOUR=0%Hour%"
  1491.         ) else (
  1492.             set "_UTC_HOUR=%Hour%"
  1493.         )
  1494.     )
  1495.     if defined Minute (
  1496.         if "%Minute:~1,1%"=="" (
  1497.             set "_UTC_MINUTE=0%Minute%"
  1498.         ) else (
  1499.             set "_UTC_MINUTE=%Minute%"
  1500.         )
  1501.     )
  1502.     if defined Second (
  1503.         if "%Second:~1,1%"=="" (
  1504.             set "_UTC_SECOND=0%Second%"
  1505.         ) else (
  1506.             set "_UTC_SECOND=%Second%"
  1507.         )
  1508.     )
  1509.     set "_UTC_TIME=%_UTC_HOUR%:%_UTC_MINUTE%:%_UTC_SECOND%"
  1510.     set "_UTC_DATE=%_UTC_DAY_IN_MONTH%/%_UTC_MONTH_N%/%_UTC_YEAR%"
  1511.  
  1512.  
  1513.     set "_DATE_serial=%_YEAR%%_MONTH_N%%_DAY_IN_MONTH%"
  1514.     REM echo\@@@ _DATE_serial=%_DATE_serial%
  1515.  
  1516.     REM "wmic path win32_localtime get /format:list" non inizializza Milliseconds, non considera i centesimi di sec
  1517.     REM PRENDO I VALORI DA %time% e %date%
  1518.     REM PER VALORIZZARE _TIME_serial _DATE_serial ... .. .  .   .     .
  1519.     REM formato localizzato della data da "reg import myregPARETO-User.reg"
  1520.     REM reg query "HKCU\Control Panel\International"
  1521.     REM reg query "HKCU\Control Panel\International" /v sDecimal
  1522.  
  1523.     set "_CURRENT_date=%date%§%time: =0%" & REM spazi vuoti diventano "0"
  1524.     REM echo %_CURRENT_date%
  1525.     for /f "tokens=1-8 delims=/:,§" %%a in ("%_CURRENT_date%") do (
  1526.         REM echo  %%cYEAR %%bMONTH %%aDAY
  1527.         REM echo  %%dHOURS %%eMIN %%fSEC %%gCENTs
  1528.         REM set "_Year=%%c"
  1529.         REM set "_Month=%%b"
  1530.         REM set "_Day=%%a"
  1531.         set "_HOUR=%%d"
  1532.         set "_MINUTE=%%e"
  1533.         set "_SECOND=%%f"
  1534.         set "_SECOND_CENT=%%g"
  1535.         REM set "_DATE_serial=%%c%%b%%a"
  1536.         REM set "_TIME_serial=%%d%%e%%f%%g"
  1537.     )
  1538.     set "_CURRENT_date="
  1539.     set "_TIME_serial=%_HOUR%%_MINUTE%%_SECOND%%_SECOND_CENT%"
  1540.  
  1541.     set "_DATE=%_DAY_NAME% %Day% %_MONTH_NAME% %_YEAR%"
  1542.     set "_TIME=%_HOUR%:%_MINUTE%:%_SECOND%,%_SECOND_CENT%"
  1543.     REM echo\@@@_DATE==%_DATE%
  1544.     REM echo\@@@_TIME==%_TIME%
  1545.     REM echo "%~dpnx0" %1
  1546.     echo\:: %THIS_file% %C__%%~1%C_0% .
  1547.     echo\::
  1548.     echo\:: valori restituiti... .. .
  1549.     echo\::::::::::::::::::::::::::::::::::::::::
  1550.     for /f "tokens=1,2 delims=^=" %%A in ( 'set _' ) do (
  1551.         set Az=
  1552.         set Bz=
  1553.         set "Az=%%A"
  1554.         set "Bz=%%B"
  1555.         echo\:: my!Az!=!Bz!
  1556.     )
  1557.     echo\::::::::::::::::::::::::::::::::::::::::
  1558.     echo\::%MSG:§=!LF!::%
  1559.     call :FOOTER
  1560.     set "N="
  1561.     for /f "tokens=1,2 delims=^=" %%G in ('set _') do (
  1562.         set /a N+=1
  1563.         REM if "!N!" EQU "1" endlocal & endlocal
  1564.         if "!N!" EQU "1" endlocal
  1565.         set "my%%G=%%H"
  1566.     )
  1567.     set "N="
  1568. :my_date_end
  1569. :::::::::::::: my_date end ::::::::::::::::::::::::::::::::::::::::::
  1570. :::::::::::::: my_date end ::::::::::::::::::::::::::::::::::::::::::
  1571. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1572.  
  1573. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1574. :::::::::::::: my_ip4 :::::::::::::::::::::::::::::::::::::::::::::::::::
  1575. :::::::::::::: my_ip4 :::::::::::::::::::::::::::::::::::::::::::::::::::
  1576. goto :my_IP4_end
  1577. :my_IP4
  1578. REM setlocal enabledelayedexpansion
  1579. :MY_IP4_sos
  1580. if not "%~0"==":MY_IP4_sos" goto :my_ip4_sos_end
  1581.     echo\::* %THIS_file% %C__%%~1%C_0% %C__%to_file%C_0% .
  1582.     echo\::
  1583.     echo\::  Con il parametro "to_file" l'output
  1584.     echo\::  é salvato nel file "%USERPROFILE%\myIP4.txt"
  1585.     echo\:: -se disponibile l'indirizzo ip4 imposta la var "my_ip4"
  1586.     echo\::    esce con %%errorlevel%%=0
  1587.     echo\:: -se non è disponibile l'indirizzo ip4
  1588.     echo\::    esce con %%errorlevel%%^>=1
  1589. exit /b %ERROR%
  1590. :my_ip4_sos_end
  1591.  
  1592.     set "IP4output=%USERPROFILE%\myIP4.txt"
  1593.     if /i "%~2"=="to_file" set "%~2=%IP4output%"
  1594.     REM set "output=%USERPROFILE%\myIP4.txt"
  1595.     :: il file  di output viene usato da "%myscripts%\bginfo\myBgInfo.cmd"
  1596.     :: per generare l'immagine per il deskTop
  1597.  
  1598.     set "IP4=-"
  1599.     REM grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
  1600.     REM grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
  1601.     REM for /f "usebackq tokens=1-2* delims=:" %%a in (`ipconfig ^| findstr /i /r /c:"ipv4[. : ]*[0-9]"`) do set "IP4=-%%b!IP4: =!"
  1602.     for /f "usebackq tokens=1-2* delims=:" %%a in (`ipconfig ^| findstr /i /r /c:"ipv4[. : ]*[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*$"`) do (
  1603.         set "IP4=!IP4!%%b -"
  1604.     )
  1605.  
  1606.     if "%IP4%"=="-" set "IP4=-x.x.x.x IP4 NON DISPONIBILE-" & set "ERROR_IP4=x.x.x.x IP4 NON DISPONIBILE"
  1607.     :: tutto su una riga senza CR-LF
  1608.     if defined to_file echo\ | set /p "IP4=%IP4%" > "%IP4output%"
  1609.  
  1610.     REM echo\:: %THIS_file% %C__%%~1%C_0% .
  1611.     REM echo\:: return my_IP4=%IP4%
  1612.     if not defined to_file (
  1613.         echo\:: %THIS_file% %C__%%~1%C_0% .
  1614.         echo\::
  1615.         echo\:: return my_IP4=%IP4%
  1616.         echo\::  ^|
  1617.         echo\::  ^|con il parametro "to_File"
  1618.         echo\::  ^| "%THIS_file%" my_IP4 to_File
  1619.         echo\::  ^|l'output viene salvato nel file
  1620.         echo\::  ^|"%IP4output%"
  1621.     )
  1622.     if defined to_file (
  1623.         echo\:: %THIS_file% %C__%%~1%C_0% %C__%to_file%C_0% .
  1624.         echo\::
  1625.         echo\:: return my_IP4=%IP4%
  1626.         echo\::  ^|output salvato nel file.
  1627.         echo\::  ^|"%IP4output%"
  1628.     )
  1629.     echo\::::::::::::::::::::::::::::::::::::::::
  1630.     echo\::%MSG:§=!LF!::%
  1631.     call :FOOTER
  1632. (
  1633.     REM endlocal & endlocal
  1634.     endlocal
  1635.     set "my_IP4=%IP4%"
  1636.     exit /b %ERROR%
  1637. )
  1638. :my_IP4_end
  1639. :::::::::::::: my_ip4 end :::::::::::::::::::::::::::::::::::::::::::::::
  1640. :::::::::::::: my_ip4 end :::::::::::::::::::::::::::::::::::::::::::::::
  1641. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1642. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1643.  
  1644. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1645. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1646. :::::::::::::: dov'é firefox?? ::::::::::::::::::::::::::::::::::::::::::
  1647. :::::::::::::: dov'é firefox?? ::::::::::::::::::::::::::::::::::::::::::
  1648. goto :WHERE_IS_FF_end
  1649. :WHERE_IS_FF
  1650. REM setlocal enabledelayedexpansion
  1651. :WHERE_IS_FF_sos
  1652. if not "%0"==":WHERE_IS_FF_sos" goto :WHERE_IS_FF_sos_end
  1653.     echo\::* %THIS_file% %C__%%~1%C_0% .
  1654.     echo\::
  1655.     echo\::  Cerca "firefox.exe" nei percorsi d'installazione.
  1656.     for /f "tokens=1,2 delims=^=" %%A in ( 'set program' ) do (
  1657.         echo\::        %%%%A%%=="%%B"
  1658.     )
  1659.     echo\:: Cerca la directory predefinita dei profili
  1660.     echo\::  per l'utente "%USERNAME%" che esegue questo script
  1661.     echo\:: -In caso positivo imposta le var
  1662.     echo\::      my_FIREFOX_exe_PATH
  1663.     echo\::      my_FIREFOX_PATH
  1664.     echo\::      my_FIREFOX_PROFILES
  1665.     echo\::  ed esce con %%errorlevel%%=0
  1666.     echo\:: -In caso negativo esce con %%errorlevel%%^>=1
  1667. exit /b %ERROR%
  1668. :WHERE_IS_FF_sos_end
  1669.  
  1670.     set "FIREFOX_exe_PATH="
  1671.     set "FIREFOX_PATH="
  1672.     set "FIREFOX_PROFILES="
  1673.     set "FIREFOX_exe=firefox.exe"
  1674.  
  1675.     if exist "%ProgramFiles%\Mozilla Firefox\%FIREFOX_exe%" (
  1676.         set "FIREFOX_exe_PATH=%ProgramFiles%\Mozilla Firefox\%FIREFOX_exe%"
  1677.         set "FIREFOX_PATH=%ProgramFiles%\Mozilla Firefox\"
  1678.     ) else (
  1679.         echo\ attendi, cerco ..."%FIREFOX_exe%" nei percorsi d'installazione
  1680.     )
  1681.  
  1682.     if not defined FIREFOX_exe_PATH (
  1683.         for /F "tokens=2 delims=^=" %%A in ( '@set ProgramFiles' ) do (
  1684.             echo\ "%%A"
  1685.             for /f "tokens=*" %%G in ('where /r "%%A" %FIREFOX_exe% ^2^>nul') do (
  1686.                 echo\ "%%G"
  1687.                 set "FIREFOX_exe_PATH=%%~fG"
  1688.                 set "FIREFOX_PATH=%%~dpG"
  1689.             )
  1690.         )
  1691.     )
  1692.  
  1693.     if not defined FIREFOX_exe_PATH (
  1694.         if "%ProgramW6432%"=="%ProgramFiles%" (
  1695.             goto :where_is_FF00
  1696.          )
  1697.     )
  1698.     if not defined FIREFOX_exe_PATH (
  1699.         for /f "tokens=*" %%M in ('where /r "%ProgramW6432%" %FIREFOX_exe% ^2^>nul') do (
  1700.             set "FIREFOX_exe_PATH=%%~fM"
  1701.             set "FIREFOX_PATH=%%~dpM"
  1702.         )
  1703.     )
  1704.  
  1705.     :where_is_FF00
  1706.     if not defined FIREFOX_exe_PATH (
  1707.         set "ERROR_firefox_path=nei percorsi d'installazione dei programmi § "%FIREFOX_exe%" non c'é"
  1708.     )
  1709.  
  1710.     if defined FIREFOX_exe_PATH (
  1711.         set "my_FIREFOX_PATH=%FIREFOX_PATH%"
  1712.         set "my_FIREFOX_exe_PATH=%FIREFOX_exe_PATH%"
  1713.         echo\:: return my_FIREFOX_PATH="!FIREFOX_PATH!"
  1714.         echo\::        my_FIREFOX_exe_PATH="!FIREFOX_exe_PATH!"
  1715.         if exist "%appdata%\mozilla\firefox\profiles.ini" (
  1716.             set "my_FIREFOX_PROFILES=%appdata%\mozilla\firefox\"
  1717.             echo\::        my_FIREFOX_PROFILES="!my_FIREFOX_PROFILES!"
  1718.             echo\::::::::::::::::::::::::::::::::::::::::
  1719.             echo\::%MSG:§=!LF!::%
  1720.         )
  1721.     ) else (
  1722.         if exist "%appdata%\mozilla\firefox\profiles.ini" (
  1723.             set "FIREFOX_PROFILES=%appdata%\mozilla\firefox\"
  1724.             echo\::::::::::::::::::::::::::::::::::::::::
  1725.             echo\::  Trovati profili personali di "%USERNAME%" in
  1726.             echo\::  "!FIREFOX_PROFILES!"
  1727.         )
  1728.     )
  1729.  
  1730.     call :FOOTER
  1731.  
  1732. (
  1733.     REM endlocal & endlocal
  1734.     endlocal
  1735.     set "my_FIREFOX_exe_PATH=%my_FIREFOX_exe_PATH%"
  1736.     set "my_FIREFOX_PATH=%my_FIREFOX_PATH%"
  1737.     set "my_FIREFOX_PROFILES=%my_FIREFOX_PROFILES%"
  1738.     exit /b %ERROR%
  1739. )
  1740. :WHERE_IS_FF_end
  1741. :::::::::::::: dov'é firefox?? fine :::::::::::::::::::::::::::::::::::::::::
  1742. :::::::::::::: dov'é firefox?? fine :::::::::::::::::::::::::::::::::::::::::
  1743. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1744. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1745.  
  1746.  
  1747.  
  1748.  
  1749. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1750. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1751. ::::::::::::: Etichette attive solo se richamate da CALL :::::::::::::::::::::::
  1752. :HEADER
  1753. if not "%~0"==":HEADER" goto :HEADER_end
  1754.     echo\-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1755.     REM echo\"%THIS_file_full_path%" D="%THIS_file_date%" Z="%THIS_file_size%"
  1756.     REM echo\ %THIS_file_full_path% %ALL_0arg%
  1757.     echo\ %THIS_file_full_path% %1
  1758.     echo\         start %TIME_start%
  1759.     echo\-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1760.     if not "%~1"=="" (
  1761.         echo\  %~1
  1762.         echo\::::::::::::::::::::::::::::::::::::::::
  1763.     )
  1764.     for /f "tokens=1,2 delims=^=" %%a in ( '"set ERROR_ 2>nul"' ) do (
  1765.         echo\%C_RED% [%%a] %C_0%%%b
  1766.     )
  1767.     echo\::::::::::::::::::::::::::::::::::::::::
  1768. goto :EOF
  1769. :HEADER_end
  1770.  
  1771. :FOOTER
  1772. if not "%~0"==":FOOTER" goto :FOOTER_end
  1773.     echo\::::::::::::::::::::::::::::::::::::::::
  1774.     REM set ERROR_
  1775.     for /f "tokens=1,2 delims=^=" %%A in ( '"@set ERROR_ 2>nul"' ) do (
  1776.         set /a ERROR+=1
  1777.         set "X=%%B"
  1778.         REM echo\ %C_RED%[%%A]%C_0% %%B
  1779.         REM echo\ %C_RED%[%%A]%C_0% !X:$=%LF%!
  1780.         echo\ %C_RED%[%%A]%C_0% !X!
  1781.     )
  1782.     if not defined ERROR (
  1783.         set ERROR=0
  1784.     )
  1785.     set "TIME_end=%time%"
  1786.     echo\-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1787.     echo\ %THIS_file_full_path% %ALL_0arg:"=%
  1788.     if %ERROR% GTR 0 echo\ %C_RED%EXIT errorlevel%C_0%=%ERROR%
  1789.     echo\  Avviato alle %TIME_start%
  1790.     echo\     Fine alle %TIME_end%
  1791.     echo\-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1792.     echo\-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1793.     chcp %CHCP_OLD% > nul
  1794.     endlocal
  1795.     exit /b !ERROR!
  1796. :FOOTER_end
  1797.  
  1798. :SOS_all
  1799. if not "%~0"==":SOS_all" goto :SOS_all_end
  1800.     echo\::*Questo file "%THIS_file_full_path%"
  1801.     echo\:: contiene funzioni indipendenti e restituiscono variabili
  1802.     echo\:: che iniziano con "my_" visualizzabili con "set my_".
  1803.     echo\::*Per ogni funzione è disponibile un'aiuto
  1804.     echo\:: richiamabile con "[-h|/h|-?|/?]" seguito dal nome della funzione.
  1805.     echo\::*Le funzioni disponibili sono elencate qui sotto:
  1806.     echo\::
  1807.     set /a N=0
  1808.     for /f "tokens=*" %%A in ( 'findstr /r /x /c:"^[:][A-Z_0-9].*_sos$" "%THIS_file_full_path%"' ) do (
  1809.         set /a N+=1
  1810.         set "X=%%A"
  1811.         set "X=!X::=!"
  1812.         set "X=!X:_sos=!"
  1813.         REM echo\@@@!N!- %%A - !X!
  1814.         if "!N!" EQU "4" (
  1815.             set "Xz=!Xz! - !X! §"
  1816.             set /a N=0
  1817.         ) else (
  1818.             set "Xz=!Xz! - !X!"
  1819.         )
  1820.     )
  1821.     echo\::   %Xz:§=!LF!::   % & set "N=" & set "X=" & set "Xz="
  1822.     echo\::*"%THIS_file_full_path%" [-h^|/h^|-?^|/?] %C__%all%C_0%  .
  1823.     echo\:: Visualizza l'aiuto per tutte le funzioni
  1824.     echo\::::::::::::::::::::::::::::::::::::::::
  1825.     echo\::---------
  1826.     echo\:: %MSG:§=!LF!:: %
  1827.     echo\::---------
  1828.     echo\::::::::::::::::::::::::::::::::::::::::
  1829.     echo\::::::::::da fare o migliorare::::::::::
  1830.  
  1831.     REM echo\
  1832.     REM echo\* "%THIS_file%" where_is_ff
  1833.     REM echo\* "%THIS_file%" my_date
  1834.     REM echo\*^|"%THIS_file%" my_ip4 to_file
  1835.     REM echo\ ^|  con il parametro "to_file" l'output
  1836.     REM echo\ ^|  é salvato nel file "%USERPROFILE%\myIP4.txt"
  1837.     REM echo\
  1838.     REM echo\
  1839.     REM echo\* "%THIS_file%" user_is_admin
  1840.     REM echo\
  1841.     REM echo\*^|"%THIS_file%" run_as_admin
  1842.     REM echo\ ^|  %%2="path al file da eseguire come Administrators"
  1843.     REM echo\ ^|  %%3="eventuali parametri da passare"
  1844.     REM echo\ ^|  Spazi vuoti devono essere racchiusi tra " "
  1845.     REM echo\
  1846.     REM echo\*^|"%THIS_file%" time_elapsed %%2 "%%3"
  1847.     REM REM set "pat=[-:,.|;#\/]"
  1848.     REM REM echo\echo %time%x ^| findstr /i /r /c:"[ 0-9][0-9]!pat![0-9][0-9]!pat![0-9][0-9]!pat![0-9][0-9]"
  1849.     REM REM echo\%time% | findstr /i /r /c:[ 0-9][0-9]!!pat!![0-9][0-9]!pat![0-9][0-9]!pat![0-9]*$ & echo error=%errorlevel%
  1850.     REM echo\ ^|  %%2=TS oppure TE indica come considerare %%3
  1851.     REM echo\ ^|     TS TIME start considera %%3 come "%%time%%" di avvio
  1852.     REM echo\ ^|     TE TIME end   considera %%3 come "%%time%%" di fine
  1853.     REM echo\ ^|"%THIS_file%" time_elapsed CALC
  1854.     REM echo\ ^|  Calcola la differenza tra TS "%%time%%" e TE "%%time%%"
  1855.     REM echo\ ^|  Restituisce le var:
  1856.     REM echo\ ^| .......................................
  1857.     REM REM echo\::%THIS_file% exit %%errorlevel%%==0 tutto OK
  1858.     REM REM echo\::%THIS_file% exit %%errorlevel%%=^>1 ERRORE
  1859.     REM REM echo\::reset tutte le var "my_"
  1860.     REM REM echo\::%RESET_all_var%
  1861.     REM endlocal
  1862. goto :EOF
  1863. :SOS_all_end
  1864. ::::::::::::: Etichette attive solo se richamate da CALL fine ::::::::::::::::::
  1865. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1866.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement