Un outil de maintenance Windows puissant, entièrement en CMD. Nettoie, optimise et surveille votre système sans installer quoi que ce soit.
ComputerWash.cmd est un script de maintenance Windows développé depuis 2019. Double-clic, et c'est parti, aucun logiciel à installer, aucune dépendance externe.
Entièrement écrit en CMD natif, il tourne sur n'importe quelle machine Windows sans configuration préalable.
Développé et maintenu en solo par PastequeOsaure, avec une philosophie simple : faire le maximum avec le minimum.
Suppression des fichiers temporaires, du cache Windows et des résidus inutiles pour libérer de l'espace disque.
Vidage du cache DNS, réinitialisation des paramètres réseau et correction des problèmes de connectivité courants.
Vérification de l'intégrité des fichiers système avec SFC et DISM pour détecter et réparer les corruptions.
Aucun setup, aucun installeur, aucune dépendance. Un seul fichier .cmd, c'est tout ce qu'il faut.
Utilise uniquement les outils intégrés à Windows. Compatible Windows 10 et Windows 11.
Code entièrement lisible et auditable. Pas de boîte noire, pas de telemetry. Vous savez exactement ce qui se passe.
Vous pouvez ajouter vos propres options et fonctions.
Exécute vos propres scripts .cmd ou .bat depuis un dossier My script sans modifier ComputerWash.cmd Zéro modification du code source.
Tout ce qu'il faut savoir pour utiliser ComputerWash.cmd efficacement.
Lancez ComputerWash.cmd ou ComputerWash.exe
Choisissez les tâches automatiques (A1 à A5) et/ou spécifiques (S1 à S15)
Configurez les options du menu principal (C1 à Start) si nécessaire
Validez avec Start et attendez la fin des opérations
Confirme que le script provient d'une source fiable.
Si refusé : mode normal. Si accepté : démarrage admin + fermeture des instances non-admin.
Les versions modifiées déclenchent un délai de 15 secondes.
Le script se copie dans C:\Windows\System32 et se relance avec les mêmes arguments. (uniquement s'il est lancé depuis %temp%)
Certaines commandes critiques comme SFC /scannow, le reset de Windows Update ou l’arrêt d’un service occupé peuvent échouer si un processus système ne s’est pas encore libéré.
Pour y remédier, le script implémente une boucle de réessai avec compteur de tentatives (Temploop) : si la commande retourne un errorlevel non nul, elle est relancée automatiquement jusqu’à 5 fois maximum avant de passer à la suite.
Cas couverts : démarrage/arrêt de services (wuauserv, bits, cryptSvc...), SFC, et toute commande dont la disponibilité dépend de l’état des services Windows. Si au bout de 5 essais la commande est toujours en erreur, le script continue normalement sans bloquer l’exécution.
Le fichier log est créé dans le même dossier que le script.
Le fichier log est enregistré automatiquement sur le Bureau de l'utilisateur.
Le spinner démarre automatiquement lorsqu’une tâche prend du temps, sans afficher de barre de progression.
Il se ferme automatiquement.
Si vous fermez manuellement ComputerWash.cmd, le spinner ne s’arrête jamais.
Si vous fermez manuellement le spinner, il risque de ne pas s'ouvrir lors de la prochaine exécution (reset).
⚠ Toujours valider avec Start pour exécuter.
DISM RestoreHealth + SFC /scannow. Réparation quotidienne de l'image système et des fichiers corrompus.
DISM + SFC + suppression des fichiers temporaires utilisateur et système.
Chkdsk + Cleanmgr + DISM + SFC + log CBS + suppression temp. Nettoyage approfondi avec log.
Tout A3 + scan antivirus complet (MRT + Defender) + reset réseau complet + redémarrage.
winget upgrade --all --silent Met à jour toutes les applications installées via Winget.
⚠ Toujours valider avec Start pour exécuter.
MRT + mise à jour signatures Defender + scan boot sector + scan complet.
UsoClient : scan → download → install → restart.
Arrêt services WU → suppression SoftwareDistribution/catroot2 → re-registration DLLs → redémarrage services.
DISM + SFC + extraction log CBS.log vers le fichier de log.
Lance Rstrui.exe Interface de restauration système Windows.
Shutdown /r /o Redémarre dans l'environnement de récupération Windows.
bcdboot C:\Windows /s C: /f ALL Répare le démarrage Windows (BitLocker requis).
Mdsched + Shutdown /r Lance le diagnostic mémoire Windows au prochain redémarrage.
chkdsk C: /F /R /I Planifie un checkdisk au prochain redémarrage.
Cleanmgr + suppression fichiers temp utilisateur et système.
Supprime %temp% et %Windir%\Temp.
Winsock reset + IP reset + Firewall reset + FlushDNS.
wsreset Réinitialise le cache du Windows Store.
Installe via winget : Chrome, Firefox, VLC, Acrobat, 7zip, KeePass.
Identique à A5 winget upgrade --all --silent.
Les options C s'exécutent dans l'ordre indiqué. Elles permettent d'activer/désactiver des actions précises.
| Code | Action | Défaut |
|---|---|---|
C1 | Create Restore Point | ON |
C2 | Windows KEY + System Info | OFF |
C3 | Chkdsk C: /F /R /I | OFF |
C4 | Defrag C: /U /V (HDD seulement !) | OFF |
C5 | Cleanmgr /sagerun:65535 | OFF |
C6 | DISM RestoreHealth | OFF |
C7 | Sfc /scannow | OFF |
C8 | Log SFC | OFF |
C9 | Mrt.exe full scan | OFF |
C10 | MpCmdRun SignatureUpdate | OFF |
C11 | MpCmdRun BootSectorScan | OFF |
C12 | MpCmdRun ScanType 2 (full) | OFF |
C13 | Pnpunattend auditsystem /s /l | OFF |
C14 | Mode | OFF |
C15 | Mdsched (RAM diagnostic) | OFF |
C16 | bcdboot C:\Windows /s C: /f ALL | OFF |
C17 | Wsreset | OFF |
C18 | Rstrui.exe | OFF |
C19 | winget upgrade --all --silent | OFF |
C20 – C25 | Winget install (Chrome / Firefox / VLC / Acrobat / 7zip / KeePass) | OFF |
C26 – C29 | net stop (wuauserv / cryptSvc / bits / msiserver) | OFF |
C30 – C31 | Suppression fichiers temp | OFF |
C32 – C33 | Suppression SoftwareDistribution / catroot2 | OFF |
C34 – C40 | Reset réseau (Winsock / IP / Firewall / DNS / proxy / BITS) | OFF |
C41 | Re-registration DLL Windows Update | OFF |
C42 – C45 | net start (wuauserv / cryptSvc / bits / msiserver) | OFF |
C46 – C49 | UsoClient (Scan / Download / Install / Restart) | OFF |
C50 | Shutdown /r | OFF |
C51 | Shutdown /r /o (Recovery) | OFF |
C52 | Shutdown /s | OFF |
C53 | Pause | ON |
C54 | Exit | ON |
Start | Start Lance l'exécution | OBLIGATOIRE |
Les commandes T ne passent pas par l'algorithme ASC. Elles s'exécutent immédiatement et quittent le script. Impossible de les cumuler avec S1, A1, etc.
Rend un disque ou volume en lecture seule, ou supprime cette restriction. Paramètres : 1/2 pour un volume, 3/4 pour un disque entier. Utilise diskpart + attributes.
Ping la gateway en boucle. Si non détectée, permet de saisir une adresse manuelle (ex: 8.8.8.8). En cas d'erreur de connexion, passe en mode infini jusqu'au rétablissement puis se reset automatiquement.
⚠️ Le script ne sera plus officiel après modification.
La vérification SHA-256 au démarrage le détectera et affichera un avertissement.
C'est voulu cela indique que la version ne provient pas de la source officielle.
Le menu visuel (A, S, C) est généré automatiquement par :AutoLigneMenu qui itère les différente variables.. et construit les lignes affichables.
Ajouter dans :Var set A6=Ma fonction
suffit pour qu’elle apparaisse dans le menu A sans modifier le reste.
Conséquence directe : inverser A1 et A3, ajouté ou réordonner les options n’affecte pas le comportement du script.
:algo exécute toujours les sous-routines dans son propre ordre défini, indépendamment de l’ordre de déclaration des variables. C’est ce qui rend le script résilient à l’édition.
⚠️ Bien vérifier qu'une variable ou fonction ne soit pas déjèa présente lors de vos modification !
Dans :Var, ajouter une ligne suffit. :AutoLigneMenu construit le menu A automatiquement.
rem Dans :Var déclarer l'option set A6=Ma fonction rem Elle apparaît automatiquement dans le menu A rem Elle n'apparaît PAS dans le menu AS (géré manuellement) rem Dans :Preparateur_de_variable la rendre sélectionnable if /I "%valeur%"=="Ma fonction" ( set maVariable=1 set choix=C )
Chaque fonction C suit un patron standard en trois phases : enregistrement dans le registre, toggle ON/OFF dans le menu, exécution avec retry.
Exemple avec SFC
:Sfcscannow set Temploop=0 set /a nb+=1 :Retry_Sfcscannow if "!init!"=="1" ( rem Phase 1 : enregistrement dans le registre C%nb% set "C%nb%=sfc" set sfc=0 ) else ( rem Phase 2 : toggle ON/OFF + affichage + exécution if /I "!valeur!"=="sfc" ( set choix=C if /I "!sfc!"=="0" ( set sfc=1 ) else ( set sfc=0 ) ) set "C%nb%=Sfc /scannow " if /I "!sfc!"=="0" set "C%nb%=!C%nb%!%SFCRED%OFF%SRESET%" if /I "!sfc!"=="1" ( if "!Start?!"=="2" ( rem Exécution uniquement si Start? = 2 call :separator "Sfc /scannow" Sfc /scannow set temperror=!ERRORLEVEL! Call :LOGERRORLEVEL !temperror! if !temperror! GEQ 1 ( Call :Retry Sfcscannow ) ) set "C%nb%=!C%nb%!%SFCGREEN%ON%SRESET%" ) ) goto :eof
Une fois la fonction écrite, deux étapes suffisent :
1. Placer la fonction dans la zone 🔧 Algo + menu personnalisé, sans couper une fonction déjà présente délimitée par les balises :: ======.
2. Dans :algo, ajouter call :Ma_fonction À l'endroit où vous souhaitez qu'elle s'exécute.
L'ordre dans :algo est l'ordre réel d'exécution.
⚠️ Cela va décaler automatiquement toutes les fonctions qui se trouvent après celle implémentée !
Gratuit, open source, et prêt à l'emploi en deux secondes.
↓ Télécharger la dernière version