2 votes

Problème de LOT avec deuxième choix

Je suis actuellement en train de travailler sur un fichier batch qui supprimera tous les fichiers du lecteur USB sélectionné. Le code fonctionne, mais je voulais ajouter une deuxième option pour être sûr que l'utilisateur est certain qu'il a choisi le bon lecteur ou non et la deuxième option ne répond pas. Peu importe l'option que je choisis, elle supprimera d'une manière ou d'une autre tous les fichiers à partir de ce point.

Je suis nouveau en batch et en programmation aussi

Voici un code:

@echo off

choice /c YN /t 15 /d n /m "Voulez-vous supprimer tous les fichiers du lecteur USB? Y-oui, N-non"

setlocal enabledelayedexpansion
Set "USB="

if errorlevel == 1 goto ONE
if errorlevel == 2 goto TWO
if errorlevel == 255 goto ERROR

:ONE
for /f "tokens=1-5" %%a in (
 'wmic logicaldisk list brief'
) do if %%b Equ 2 if %%d gtr 0 Set USB=!USB! %%a
Echo:Found drive's:%USB%
set /p Drive=Choisissez le lecteur: 
if "%Drive%"=="" goto :ERROR
if not exist %drive%:\ goto :ERROR
if %drive% EQU C goto ERROR
if %drive% EQU D goto ERROR
cd /D %Drive%:
tree

:CHOICE
choice /c YN /t 15 /d N /m "Êtes-vous sûr de vouloir supprimer tous les fichiers? Y-oui, N-non"
if errorlevel == 1 goto DELETE
if errorlevel == 2 goto TWO
goto END

:TWO
echo "Le programme a été annulé"
goto END

:DELETE
del * /S /F /Q
rmdir /S /Q %Drive%:
echo "Les fichiers ont été supprimés"
goto END

:ERROR
echo "Une erreur s'est produite"
goto end

:END
echo "Terminé"
pause

1voto

Compo Points 15485

Voici un exemple, qui inclut une méthode plus approfondie pour détecter les lecteurs USB.

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
For /F "Skip=2 Tokens=*" %%A In ('WMIC DiskDrive Where InterfaceType^="USB"^
     Assoc /AssocClass:Win32_DiskDriveToDiskPartition 2^>Nul') Do (
    For /F UseBackQ^ Delims^=^"^ Tokens^=2 %%B In ('%%A') Do (
        For /F Delims^=^":^ Tokens^=6 %%C In (
            'WMIC Path Win32_LogicalDiskToPartition^|Find "%%B"') Do (
            For /F "Skip=1 Delims=" %%D In ('WMIC LogicalDisk Where^
             "DeviceID='%%C:'" Get DeviceID^, VolumeName') Do Echo( %%D
            Set "_C=!_C!%%C")))
If Not Defined _C Echo( Vous n'avez pas de lecteur USB connecté && GoTo :EndIt
If "%_C:~,1%" Equ "%_C%" GoTo :Picked
Echo( Entrez la lettre du lecteur USB ci-dessus [%_C%]:
For /F "Delims=? Tokens=2" %%A In ('Choice /C %_C%') Do Set "Letter=%%A:"
:Picked
If Not Defined Letter (Call :Task %_C%:) Else (Call :Task %Letter%)
:EndIt
>Nul Timeout 5
Exit/B
:Task
Choice /C YN /T 15 /D N /M "Voulez-vous supprimer tous les fichiers de %1"
If ErrorLevel 2 Exit /B
REM Placez vos commandes ici pour supprimer du lecteur sélectionné

0voto

FZs Points 3553

Je pense que la valeur de errorlevel sera remplacée au premier if. J'espère que cela vous aidera:

@echo off

setlocal enabledelayedexpansion
Set "USB="
choice /c YN /t 15 /d n /m "Voulez-vous supprimer tous les fichiers du lecteur USB? O-oui, N-non"

set x=%errorlevel%
Si %x%==1 goto ONE
Si %x%==2 goto TWO

:ONE
for /f "tokens=1-5" %%a in (
 'wmic logicaldisk list brief'
) do if %%b Equ 2 if %%d gtr 0 Set USB=!USB! %%a
Echo:Found drive's:%USB%
set /p Drive=Choisissez le lecteur:
if "%Drive%"=="" goto ERROR
if not exist %drive%:\ goto :ERROR
if %drive% EQU C goto ERROR
if %drive% EQU D goto ERROR
cd /D %Drive%:
tree

:CHOICE
choice /c YN /t 15 /d N /m "Êtes-vous sûr de vouloir supprimer tous les fichiers? O-oui, N-non"
Set x=%errorlevel%
if %x% == 1 goto DELETE
if %x% == 2 goto TWO

:TWO
echo "Le programme a été annulé"
goto END

:DELETE
del * /S /F /Q
rmdir /S /Q %Drive%:
echo "Les fichiers ont été supprimés"
goto END

:ERROR
echo "Une erreur s'est produite"
goto end

:END
echo "Terminé"
pause

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X