Skip to content

Instantly share code, notes, and snippets.

@Fred-Vatin
Last active July 27, 2017 19:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fred-Vatin/0e907150d14e68f26794207fbeec8fa0 to your computer and use it in GitHub Desktop.
Save Fred-Vatin/0e907150d14e68f26794207fbeec8fa0 to your computer and use it in GitHub Desktop.
My batch/cmd template
:: Pour conserver la mise en page, décorations et les accents
:: toujours charger et enregistrer les fichiers bat ou cmd en encodage
:: "OEM" alias "CP850" alias "DOS Latin 1"
:: et avec le retour de ligne DOS
@echo off
cls
:: mode con cols=100 lines=45
title Restauration des Paramètres
:: S'assurer que le chemin sera relatif à l'emplacement du batch en admin
cd /d "%~dp0"
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: =====================================================================
:: --- VARIABLES VALIDES
:: =====================================================================
:: set liste toutes les variables valides sur le PC
:: %__APPDIR__% le répertoire contenant l'exécutable de la commande (C:\Windows\SYSTEM32\)
:: %ALLUSERSPROFILE% C:\ProgramData
:: %APPDATA% C:\Users\{username}\AppData\Roaming
:: %CD% Dossier de travail courant (C:\Users\Fred)
:: %__CD__% Idem que %CD% mais avec un antislash final (C:\Users\Fred\)
:: %CmdCmdLine% Retourne la ligne de commande donnée au batch
:: %CMDEXTVERSION% Retourn un nombre (NT = "1", Win2000+ = "2")
:: %COMMONPROGRAMFILES% C:\Program Files\Common Files
:: %COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
:: %COMPUTERNAME% Retourne le nom attribué à l'ordinateur (PC-FRED)
:: %COMSPEC% C:\Windows\System32\cmd.exe
:: %DATE% retourne la date au format régional (18/07/2017)
:: %ERRORLEVEL% Contient le code d'erreur de la dernière commande utilisée ou celle renvoyé par "EXIT /B 65" où %ERRORLEVEL% sera égale à 65
:: !ERRORLEVEL! Utiliser ça avec "setlocal ENABLEDELAYEDEXPANSION" pour être sûr d'avoir le code de retour de la dernière command en toute circonstance
:: %FIRMWARE_TYPE% Le type de boot du système, ex: Legacy ,UEFI, Not implemented, Unknown
:: %HOMEDRIVE% Contient la lettre de lecteur sur laquelle le répertoire de l'utilisateur courant est situé (C:)
:: %HOMEPATH% \Users\{username} (note: pas de lettre de disque)
:: %LOCALAPPDATA% C:\Users\{username}\AppData\Local
:: %LOGONSERVER% \\{domain_logon_server} (\\PC-FRED)
:: %NUMBER_OF_PROCESSORS% Retourne le nombre de processeurs (12)
:: %OS% Version Système d'exploitation (Windows_NT)
:: %PATH% Retourne le chemin d'accès vers les principaux exécutables du système
:: %PATHEXT% Retourne les extensions que le système considère comme exécutables.
:: %PROCESSOR_ARCHITECTURE% Retourne l'architecture utilisée par la commande (AMD64/IA64/x86)
:: %PROCESSOR_IDENTIFIER% ID du processeur (Intel64 Family 6 Model 62 Stepping 4, GenuineIntel)
:: %PROCESSOR_LEVEL% 6
:: %PROCESSOR_REVISION% Version du proc (3e04)
:: %PROGRAMDATA% C:\ProgramData
:: %PROGRAMFILES% C:\Program Files
:: %PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64Êbit version)
:: %PROMPT% Code for current command prompt format,usually $P$G (C:>)
:: %PSModulePath% Chemins contenant des modules PowerShell
:: %PUBLIC% C:\Users\Public
:: %RANDOM% Retourne un entier compris entre 0 et 32167 choisi aléatoirement par le système
:: %SystemDrive% C:
:: %SystemRoot% C:\Windows
:: %TEMP% et %TMP% C:\Users\{username}\AppData\Local\Temp
:: %TIME% Retourne l'heure actuelle au format régional (20:49:13,11)
:: %USERDOMAIN% Contient le domain auquel appartient le compte courant. Normalement équivalent à %COMPUTERNAME% (PC-FRED)
:: %USERNAME% Fred
:: %USERPROFILE% C:\Users\{username}
:: %WINDIR% C:\Windows
:: Utiliser "SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION"
:: permet d'appeler les variable avec ! au lieu de %
:: d'obtenir les valeurs attendues à l'intérieur des blocs (if, for, etc.)
:: Set __COMPAT_LAYER=RunAsInvoker
:: Permet de changer le niveau de privilège des commandes qui seront exécutées ensuite.
:: Valeurs valides: RunAsInvoker, RunAsHighest, RunAsAdmin
:: Chemin du batch en admin comprenant un trailing slash (voir "for /?" pour ce type de variable)
:: echo %~dp0
:: 0 = the calling file, 1 = argument =1, 2 = argument =2, etc..
:: ajouter clé de registre
:: if exist setting.reg (
:: REG DELETE /f "HKCU\Software\NCH Software\VideoPad"
:: regedit /s setting.reg
:: )
:: exporter la clé dans un fichier reg
:: REG EXPORT "HKCU\Software\machin" setting.reg
:: =====================================================================
:: --- SET VARIABLES
:: =====================================================================
set title=Restauration des paramètres
:: relative or absolute path with no trailing "\"
set backupFolder=backup
:: name of the file where to save a key or to restore from
set regFileName=settings.reg
:: key to backup
set regKey=HKCU\Software\AnyStuff
:: You shouldn't touch these variables
set system-color=color 07
set error-color=color 4E
set end-color=color 2F
:: =====================================================================
:: --- CHECK IF ADMIN
:: Use this section if the batch need to be run as admin
:: =====================================================================
:: Affiche une erreur si le batch n'est pas lancé en mode admin
CALL :IsAdmin
:: =====================================================================
:: --- CONFIRMATION
:: Use this section to show a confirm message before running process
:: =====================================================================
:: param1 @string: "confirm message"
CALL :Confirm "ÊTES-VOUS SÛR DE VOULOIR POURSUIVRE LA RESTAURATION"
:: =====================================================================
:: --- Fermer un programme qui bloquerait la suite du script
:: Use this section to kill a programm
:: =====================================================================
:: param1 @string: "process.exe"
:: param2 @goto: success section
CALL :CloseProcess "any process.exe",Backup
:Backup
:: =======================================================================
:: ================ RESTAURER UNE CLÉ DE REGISTRE ================
:: Use this section if you want to restore a registry key
:: =======================================================================
:RestoreReg
:: param1 @path: "relative or absolute path\backupFile.reg"
:: param2 @regkey: "path to regkey to delete before replace if param4 = 1"
:: param3 @goto: success section
:: param4 @number: 1 = replace all, 0 = just overwrite existing values
:: param5 @number: if fail -> 1 = stop script, 0 = continue script
CALL :RestoreRegKey "%backupFolder%\%regFileName%","%regKey%",folder,0,0
:: =======================================================================
:: ================ SAUVEGARDER UNE CLÉ DE REGISTRE ================
:: Use this section if you want to backup a registry key
:: =======================================================================
:BackupReg
:: param1 @regkey: "path to Reg Key to backup"
:: param2 @path: "relative of absolute path\backupFile.reg"
:: param3 @goto: success section
:: param4 @number: if fail -> 1 = stop script, 0 = continue script
CALL :BackupRegKey "%regKey%","%backupFolder%\%regFileName%",folder,1
:folder
:: =====================================================================
:: ================ COPIE DE DOSSIERS ================
:: Use this section if you want to copy a folder
:: =====================================================================
echo.
echo ╔════════════════════════════════════════════════════════════╗
echo.
echo RESTAURATION DE (à compléter)
echo.
echo ------------------------------------------------------------
echo.
:: param1 @path: "folder to copy"
:: param2 @path: "target folder where will be pasted param1 content"
:: param3 @string: "success message"
:: param4 @string: "fail message"
:: param5 @goto: section
:: param6 @number: 1 = delete original target and replace, 0 = just overwrite
CALL :CopyFolder "%backupFolder%\Folder to copy","%APPDATA%\Target folder","RÉUSSI: copie de machin","AUCUNE RESTAURATION DE TRUC EFFECTUÉE",files,0
:files
:: =====================================================================
:: ================ COPIE DE FICHIERS ================
:: Use this section if you want to copy one or multiple files
:: =====================================================================
echo.
echo ╔════════════════════════════════════════════════════════════╗
echo.
echo SAUVEGARDE DE (à compléter)
echo.
echo ------------------------------------------------------------
echo.
:: param1 @path: "file(s) to copy (accept pattern like *.text)"
:: param2 @path: "target folder where will be pasted param1 content"
:: param3 @string: "success message"
:: param4 @string: "fail message"
:: param5 @goto: section
:: param6 @number: 1 = delete original target and replace, 0 = just overwrite
CALL :CopyFiles "%APPDATA%\Some path\*.dot*","%backupFolder%\Target folder","RÉUSSI: Machin sauvegardé","AUCUNE SAUVEGARDE DU TRUC EFFECTUÉE",footer,1
:footer
:: =====================================================================
:: ===================== PIED DE PAGE =========================
:: Use this section if you want to show a final message
:: =====================================================================
echo.
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ RESTAURATION TERMINÉE: verifiez les erreurs ci-dessus ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo Appuyez sur une touche pour fermer cette fenêtre
pause>nul
:end
:: =====================================================================
:: ======================= SIGNATURE ==========================
:: Use this section if you want to show a signature before quit
:: =====================================================================
cls
call %end-color%
echo.
echo.
echo.
echo.
echo ╔══════════════════════════════════════════════════╗
echo ║ ║
echo ║ ╔═════════════════════════════════╗ ║
echo ║ ║ OPERATION TERMINÉE ║ ║
echo ║ ╚═════════════════════════════════╝ ║
echo ║ ╔═════════════════════════════════╗ ║
echo ║ ║ ╔═════════════════════════════╗ ║ ║
echo ║ ║ ║ ║ ║ ║
echo ║ ║ ║ ║ ║ ║
echo ║ ║ ║ ╔═══════╗ ║ ║ ║
echo ║ ║ ║ ║ ╔═══╝ ║ ║ ║
echo ║ ║ ║ ║ ╚═╗ ║ ║ ║
echo ║ ║ ║ ║ ╔═╝ ║ ║ ║
echo ║ ║ ║ ║ ║ ║ ║ ║
echo ║ ║ ║ ╚═══╝ reMea ║ ║ ║
echo ║ ║ ║ ║ ║ ║
echo ║ ║ ║ ║ ║ ║
echo ║ ║ ║ ╔═══ ║ ║ ║
echo ║ ║ ║ ║ VOUS REMERCIE ║ ║ ║ ║
echo ║ ║ ║ ═══╝ ║ ║ ║
echo ║ ║ ║ ║ ║ ║
echo ║ ║ ╚═════════════════════════════╝ ║ ║
echo ║ ╚═════════════════════════════════╝ ║
echo ║ ║
echo ╚══════════════════════════════════════════════════╝
echo.
echo.
echo.
CALL :Sleep 2
exit
:: ---------------------------------------------------------------------
:: -- FUNCTIONS SECTION START
:: ---------------------------------------------------------------------
:: function to verify admin/UAC privileges
:: CREDIT: http://stackoverflow.com/a/21295806/1995977
:IsAdmin
IF NOT EXIST "%SYSTEMROOT%\system32\fsutil.exe" (
call %error-color%
echo.
echo ═══════════════════════════════════════════════════════════
echo.
echo ERREUR: PRIVILÈGES INVÉRIFIABLES
echo.
echo La commmand "fsutil" n'existe pas.
echo.
echo Vous devez être connecté sur un compte admin
echo et la version minimum requise de Windows est 7.
echo.
echo Ce script n'est pas prévu pour Windows XP ou vista, etc.
echo.
echo ═══════════════════════════════════════════════════════════
echo.
echo Appuyez sur une touche pour fermer cette fenêtre.
pause>nul
EXIT
) ELSE (
"%SYSTEMROOT%\system32\fsutil.exe" dirty query "%SystemDrive%" >NUL 2>&1 || (
call %error-color%
echo.
echo ═══════════════════════════════════════════════════════════
echo.
echo ERREUR: MODE ADMIN REQUIS
echo.
echo Vous devez lancer "%~n0.bat"
echo en tant qu'administrateur
echo.
echo ═══════════════════════════════════════════════════════════
echo.
echo Appuyez sur une touche pour fermer cette fenêtre.
pause>nul
EXIT
)
)
EXIT /B
:: ---------------------------------------------------------------------
:: FUNCTION ASKING CONFIRMATION
:: Call :Confirm "param1"
:: param1 @string: "confirm message"
:: example: CALL :Confirm "Do you want to process ?"
:Confirm
cls
echo.
echo.
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo.
echo %~1
echo.
echo -----------------------------------------------------------
echo.
echo.
echo Appuyez sur une touche pour continuer ou fermer cette fenêtre
pause>nul
exit /b 0
:: ---------------------------------------------------------------------
:: FUNCTION TO CHECK AND CLOSE A PROCESS
:: CALL :CloseProcess "param1",param2
:: param1 @string: "process.exe"
:: param2 @goto: success section
:: example: CALL :CloseProcess "word.exe",Backup
:CloseProcess
:: vérifie l'existence du processus (essentiel sinon les commandes crasheront le batch)
tasklist | findstr /i "%~1" >NUL 2>&1
:: processus inactif
IF !ErrorLevel!==1 (
GOTO %~2
exit /b 0
)
:: processus actif
IF !ErrorLevel!==0 (
echo -------------------------------------------------------------
echo.
echo Fermeture de "%~1"
echo.
TASKKILL /F /IM "%~1"
echo.
CALL :Sleep 4
GOTO %~2
exit /b 0
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION TO CHECK AND CREATE A TARGET FOLDER
:: CALL :TargetFolder "param1",param2,param3
:: param1 @path: "relative of absolute path\target folder"
:: param2 @goto: success section
:: param2 @goto: fail section
:: example: CALL :TargetFolder "%backupFolder%",BackupReg,end
:TargetFolder
if not exist "%~1" (
mkdir "%~1"
)
if exist "%~1" (
goto %~2
exit /b 0
) else (
call %error-color%
echo.
echo.
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ ERREUR : DOSSIER DE RESTAURATION MANQUANT ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo Le dossier "%~dp0%backupFolder%" n'a pu être créé.
echo.
echo La sauvegarde ne peut donc pas s'effectuer.
echo.
echo Résolvez le problème et recommencez.
echo.
echo ═══════════════════════════════════════════════════════════
echo.
echo Appuyez sur une touche pour fermer cette fenêtre
pause>nul
call %system-color%
goto %~3
exit /b 1
)
exit /b 1
:: ---------------------------------------------------------------------
:: FUNCTION TO BACKUP A REG KEY
:: CALL :BackupRegKey "param1","param2",param3,param4
:: param1 @regkey: "path to Reg Key to backup"
:: param2 @path: "relative of absolute path\backupFile.reg"
:: param3 @goto: success section
:: param4 @number: if fail -> 1 = stop script, 0 = continue script
:: example: CALL :BackupRegKey "HKCU\Software\Microsoft\Office","%backupFolder%\%regFileName%",fichier,1
:BackupRegKey
cls
echo.
echo ╔════════════════════════════════════════════════════════════╗
echo.
echo Sauvegarde de la clé de registre :
echo.
echo %~1
echo.
echo ------------------------------------------------------------
echo.
:: exporter la clé dans un fichier reg
REG EXPORT "%~1" "%~2" /y >nul 2>&1
IF !ErrorLevel!==1 (
:: affichage de message si erreur durant la sauvegarde
call %error-color%
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ ERREUR DURANT LA RESTAURATION DE LA CLÉ DE REGISTRE ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo La clé de registre spécifiée n'existe pas,
echo est incorrecte ou le fichier "%~2"
echo est occupé/ouvert.
echo.
if %~4==1 (call :StopMsg)
if %~4==0 (call :ContinueMsg %~3)
call %system-color%
exit /b 1
)
IF !ErrorLevel!==0 (
echo RÉUSSI: Clé de registre sauvegardée
GOTO %~3
exit /b 0
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION TO RESTORE A REG KEY
:: CALL :RestoreRegKey "param1","param2",param3,param4,param5
:: param1 @path: "relative or absolute path\backupFile.reg"
:: param2 @regkey: "path to regkey to delete before replace if param4 = 1"
:: param3 @goto: success section
:: param4 @number: 1 = replace all, 0 = just overwrite existing values
:: param5 @number: if fail -> 1 = stop script, 0 = continue script
:: example: CALL :RestoreRegKey "%backupFolder%\%regFileName%",fichier,0,1
:RestoreRegKey
cls
echo.
echo ╔════════════════════════════════════════════════════════════╗
echo.
echo Restauration de la clé de registre :
echo.
echo %~2
echo.
echo ------------------------------------------------------------
echo.
:: if the reg file to restore exists
if exist "%~1" (
if %~4 == 1 (
REG delete "%~2" /f > nul 2>&1
)
REG import "%~1" > nul 2>&1
:: Success
if !errorlevel! == 0 (
echo RÉUSSI: Clé de registre restaurée
GOTO %~3
exit /b 0
) else (
:: affichage de message si erreur durant la restauration
call %error-color%
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ ERREUR DURANT LA RESTAURATION DE LA CLÉ DE REGISTRE ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo La commande : REG import "%~1" /f
echo a retourné un erreur.
echo.
echo Assurez-vous que le fichier "%~1" existe.
echo.
if %~5==1 (call :StopMsg)
if %~5==0 (call :ContinueMsg %~3)
call %system-color%
exit /b 1
)
) else (
:: affichage de message si le fichier n'existe pas
call %error-color%
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ FICHIER DE REGISTRE INTROUVABLE ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo Le fichier de registre spécifiée :
echo.
echo "%~1"
echo.
echo n'existe pas.
echo.
if %~4==1 (call :StopMsg)
if %~4==0 (call :ContinueMsg %~3)
call %system-color%
exit /b 1
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION TO DISPLAY INFO AND QUIT MESSAGE
:: CALL :StopMsg
:: example: CALL :StopMsg
:StopMsg
echo Le processus : %title%
echo n'ira pas plus loin.
echo.
echo Résolvez le problème et relancez le script:
echo "%~n0.bat"
echo.
echo -------------------------------------------------------------
echo.
echo Appuyez sur une touche pour fermer cette fenêtre
pause>nul
goto :end
:: ---------------------------------------------------------------------
:: FUNCTION TO DISPLAY INFO AND Continue MESSAGE
:: CALL :ContinueMsg param1
:: param1 @goto: section name
:: example: CALL :ContinueMsg next
:ContinueMsg
echo -------------------------------------------------------------
echo.
echo Appuyez sur une touche pour poursuivre le processus:
echo.
echo %title%
echo.
echo Pour l'interrompre, fermez cette fenêtre avec la souris
echo ou en tapant: CTRL+C
echo.
pause>nul
call %system-color%
GOTO %~1
exit /b 0
:: ---------------------------------------------------------------------
:: FUNCTION TO BACKUP FILES
:: CALL :CopyFiles "param1","param2","param3","param4",param5
:: param1 @path: "file(s) to copy (accept pattern like *.text)"
:: param2 @path: "target folder where will be pasted param1 content"
:: param3 @string: "success message"
:: param4 @string: "fail message"
:: param5 @goto: section
:: param6 @number: 1 = delete original target and replace, 0 = just overwrite
:: - example -
:: CALL :CopyFiles "%APPDATA%\Microsoft\Templates\*.dot*",
:: "%backupFolder%\Templates",
:: "SUCCESS: item is saved",
:: "Item not saved",
:: next
:: 0
:CopyFiles
:: suppression de la destination si la source existe
if exist "%~1" (
if %~6 == 1 (
rd /S /Q "%~2" > nul 2>&1
)
:: copie de fichier
echo F| xcopy "%~1" "%~2\" /I /V /K /Y > nul 2>&1
:: vérifier l'état de la copie
IF NOT !ErrorLevel!==0 (
call :CopyError !ErrorLevel!,"%~1","%~2",file,%~5
exit /b
) else (
echo %~3
exit /b
)
exit /b
) else (
echo.
echo █ Le.s fichier.s: "%~1"
echo █ n'existe.nt pas
echo █
echo █ %~4
echo.
exit /b
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION TO BACKUP FILES
:: CALL :CopyFolder "param1","param2","param3","param4",param5
:: param1 @path: "folder to copy"
:: param2 @path: "target folder where will be pasted param1 content"
:: param3 @string: "success message"
:: param4 @string: "fail message"
:: param5 @goto: section
:: param6 @number: 1 = delete original target and replace, 0 = just overwrite
:: - example -
:: CALL :CopyFolder "%APPDATA%\Microsoft\Templates\Document Themes",
:: "%backupFolder%\Templates",
:: "SUCCESS: item is saved",
:: "Item not saved",
:: next
:: 0
:CopyFolder
SETLOCAL
:: suppression de la destination si la source existe
if exist "%~1\" (
if %~6 == 1 (
rd /S /Q "%~2" > nul 2>&1
)
:: copie de dossier
xcopy "%~1" "%~2"\ /S /I /V /K /Y > nul 2>&1
:: vérifier l'état de la copie
IF NOT !ErrorLevel!==0 (
call :CopyError !ErrorLevel!,"%~1","%~2",folder,%~5
ENDLOCAL
exit /b
) else (
echo %~3
exit /b
)
exit /b
) else (
echo.
echo █ Le dossier: "%~1"
echo █ n'existe pas
echo █
echo █ %~4
echo.
exit /b
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION TO DISPLAY COPY ERROR MESSAGE
:: CALL :CopyError param1,"param2","param3",param4,param5
:: param1 @number: !ErrorLevel!
:: param2 @path: "source"
:: param3 @path: "target"
:: param4 @type: folder or file
:: param5 @goto: section
:: example: call :CopyError !ErrorLevel!,"%~1","%~2",file,%~5
:: affichage de message si erreur durant la copie de fichiers/dossiers
:CopyError
call %error-color%
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ ║
echo ║ ERREUR DURANT LA RESTAURATION DE FICHIERS ║
echo ║ ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo █ La copie de type [%~4]:
echo █
echo █ %~2
echo █
echo █ vers:
echo █
echo █ %~3
echo █
echo █ a retourné l'erreur numéro %~1:
echo █
if %~1==1 (
echo █ "Aucun fichier n'a été trouvé pour la copie."
)
if %~1==2 (
echo █ "L'utilisateur a pressé CTRL+C pour interrompre la copie."
)
if %~1==4 (
echo █ "Le chemin ou la syntaxe de la commande sont invalides."
)
if %~1==5 (
echo █ "Erreur durant l'écriture des données"
)
if %~5==end (
CALL :StopMsg
exit /b
) else (
CALL :ContinueMsg %~5
exit /b
)
exit /b
:: ---------------------------------------------------------------------
:: FUNCTION GIVING SOME INVISIBLE TIMEOUT
:: Call :Sleep "param1"
:: param1 @number: secondes
:: example: CALL :Sleep 5
:Sleep
timeout /T %~1 /NOBREAK >NUL 2>&1
exit /B
:: ---------------------------------------------------------------------
:: -- FUNCTIONs SECTION END
:: ---------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment