Coffre avec mot de passe (vers la version 2.0)
C'est encore moi qui cherche à améliorer un fichier de gestion de dossier-coffre avec mot de passe. Voici la version 1.3, elle-même améliorée par Hackoofr:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
@echo off
title Coffre avec mot de passe ^| Version 1.3 (updated by Hackoofr)
mode con cols=60 lines=20
call :searchcpl
if EXIST "Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}" goto saisiePass
call :searchdir
if NOT EXIST Coffre goto create
reg query ""HKLM\SOFTWARE\Coffre"">Nul
if %errorlevel%==1 goto pasdepass
:confirm
echo Voulez-vous verrouiller le dossier Coffre?(O/N)
set /p "choix=>"
if %choix%==O goto ferme
if %choix%==o goto ferme
if %choix%==n goto fin
if %choix%==N goto fin
echo Choix incorrect, veuillez r‚pondre Oui ou Non.
goto confirm
:ferme
cls
Color 9A
ren Coffre "Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}"
attrib +h +s "Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}"
echo Dossier Coffre verouill‚.
goto fin
:SaisiePass
echo Entrez le mot de passe du Dossier Coffre.
set /p "passout=>"
echo V‚rification du mot de passe en cours ....
for /f "tokens=3" %%i in ('reg query ""HKLM\SOFTWARE\Coffre"" ^| find "MDP"') do set MDP=%%i
if %passout%==%MDP% goto ouvre
if NOT %passout%==%MDP% goto incorrect
goto fin
:pasdepass
cls
echo Aucun mot de passe n'est d‚fini.
echo Veuillez d‚finir un mot de passe pour le dossier Coffre.
set /p "newpass1=>"
echo Veuillez confirmer de nouveau votre mot de passe
set /p "newpass2=>"
if "%newpass1%"=="%newpass2%" goto AjoutPassReg
if Not "%newpass1%"=="%newpass2%" echo Les Deux mots de passes ne sont pas identiques ?
PING 1.1.1.1 -n 1 -w 1000 >NUL
goto pasdepass
goto fin
:AjoutPassReg
reg Add ""HKLM\SOFTWARE\Coffre"" /v MDP /t REG_SZ /d %newpass2% > NUL
goto ferme
goto fin
:incorrect
cls
Color BC & echo Mot de passe incorrect ? ? ?
Goto Ping
:create
md Coffre
echo Le dossier Coffre est cr‚‚.
goto pasdepass
:ouvre
cls
attrib -h -s "Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}"
ren "Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}" Coffre
Color 9A
echo Mot de passe est Correct !
echo Le dossier Coffre est ouvert.
PING 1.1.1.1 -n 1 -w 1000 >NUL
Start Explorer c:\coffre
exit
:searchcpl
cls
echo Recherche de Coffre verrouill‚
set /p drive=Sp‚cifiez un lecteur (une lettre suivie de deux-points):
set /p path=Sp‚cifiez un chemin de recherche:
set file="Control Panel.{2227A280-3AEA-1069-A2DE-08002B30309D}"
dir %drive%%path%%file%>NUL
goto :eof
:searchdir
cls
echo Recherche de Coffre non verrouill‚
set /p drive=Sp‚cifiez un lecteur (une lettre suivie de deux-points):
set /p path=Sp‚cifiez un chemin de recherche:
set dir=Coffre
dir %drive%%path%%dir%>NUL
goto :eof
:Ping
PING 1.1.1.1 -n 1 -w 1000 >NUL
goto SaisiePass
:fin
pause |
L'idée serait, cette fois-ci, de séparer le batch du/des dossiers-coffres. Je précise du/des car il paraît possible qu'avec les fonctionnalités ainsi rajoutées, on puisse gérer, non plus UN coffre, mais PLUSIEURS. Est-ce possible? Si oui, comment?
:merci: d'avance pour toute information susceptible d'être utile!
Le symbole de redirection "|"
Citation:
Envoyé par
Divarius
Pourriez-vous m'expliquer cette syntaxe, en particulier la présence d'un demi-slash dans cette ligne?
:salut:
Ce caractère de redirection "|", appelé " Pipe " (canal, tuyau) en anglais permet de rediriger la sortie d’une commande vers l’entrée d’une autre.
Ce caractère s’obtient en maintenant la touche ALT enfoncé en tapant 124 au clavier (ou AltGr + 6).
Prenons un exemple bien connu : en tapant " DEL *.* " afin d’effacer le contenu d’un répertoire, un message de confirmation apparaît, demandant l’appui sur la touche " o " (pour OUI) pour continuer. Il serait intéressant de supprimer ce message de confirmation qui interrompt le déroulement d‘un batch, afin que la commande s’exécute " toute seule " sans besoin d’une validation quelconque de l’utilisateur.
La commande suivante permet de résoudre ce problème :
La " sortie " de la commande echo (le caractère " o ") est envoyée vers " l’entrée " de la commande DEL. Lorsque le message sera affiché, MS-DOS considèrera le caractère reçu comme une réponse au message et continuera l’exécution du batch.
Dans notre cas, ce sera comme une " validation " à la question " Pressez o pour continuer, n pour annuler ".
On retrouve aussi ce caractère dans l’utilisation quotidienne du DOS : le fait d’accoler " |more " à une commande standard permet que son résultat, s’il prend plusieurs écrans, ne soit pas affiché d’un coup mais en autant de fois qu’il le faut pour faciliter la lecture. Ainsi, testez sous DOS :
Code:
1 2
| CD %WINDIR%
DIR *.*|MORE |
La liste sera affichée en plusieurs fois : à chaque écran, le DOS vous demande de presser une touche pour continuer le défilement.
Maintenant A votre avis que fait la commande suivante ?
Code:
Dir %drive%\/s | find %file%
:zoubi:
Problème à moitié résolu! Youpi!
Ca marche! YOUPI! Pour ce qui est des Coffres verrouillés, nous sommes parés. Mais... comment rechercher des dossiers?
Je... Je ne sais plus quoi faire...
J'essaie de recycler vos précédentes idées dans le batch pour atteindre mon objectif. Voilà la partie du code intéréssante (surtout la partie en gras):
Code:
1 2 3 4 5 6 7 8
| :typedir
cls
echo Sp‚cifiez un lecteur (une lettre suivie de deux-points).
set /p "drive=>"
echo Sp‚cifiez un dossier.
set /p "dossierName=>"
echo Recherche du dossier "%dossierName%" dans %drive%\ en cours...
dir %drive%\ /s /b /ad | find "%dossierName%" | if exist %dossierName% cd /d %dossierName%&cd /d .. |
C'est, je crois, un bon recyclage de vos idées.
SAUF que lorsque la recherche débute, le message suivant s'affiche (et ce message fait tout rater :furieux:):
Citation:
cd était inattendu.
Que faire pour que le batch s'attende à cd?