Выпуск пакета со вторым выбором - PullRequest
0 голосов
/ 16 ноября 2018

В настоящее время я работаю над некоторым командным файлом, который будет удалять все файлы с выбранного USB-диска. Код работает, но я хотел добавить второй вариант, чтобы убедиться, что пользователь уверен, что он выбрал правильный диск или около того, и второй вариант не отвечает. Независимо от того, какой вариант я выберу, он каким-то образом удалит все файлы с этого момента.

Я новичок в пакетировании и в программировании тоже

Вот код:

@echo off

choice /c YN /t 15 /d n /m "Do you want to delete all files from USB drive? Y-yes, N-no"

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=Choose drive: 
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 "Are you sure you want to delete all files? Y-yes, N-no"
if errorlevel == 1 goto DELETE
if errorlevel == 2 goto TWO
goto END

:TWO
echo "Program was cancelled"
goto END

:DELETE
del * /S /F /Q
rmdir /S /Q %Drive%:
echo "Files are deleted"
goto END

:ERROR
echo "There was an error"
goto end

:END
echo "Done"
pause

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я думаю, что значение уровня ошибки будет заменено при первом, если.Я надеюсь, что это поможет вам:

@echo off

setlocal enabledelayedexpansion
Set "USB="
choice /c YN /t 15 /d n /m "Do you want to delete all files from USB drive? Y-yes, N-no"

set x=%errorlevel%
If %x%==1 goto ONE
If %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=Choose drive: 
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 "Are you sure you want to delete all files? Y-yes, N-no"
Set x=%errorlevel%
if %x% == 1 goto DELETE
if %x% == 2 goto TWO

:TWO
echo "Program was cancelled"
goto END

:DELETE
del * /S /F /Q
rmdir /S /Q %Drive%:
echo "Files are deleted"
goto END

:ERROR
echo "There was an error"
goto end

:END
echo "Done"
pause
0 голосов
/ 16 ноября 2018

Вот пример, который включает более тщательный метод обнаружения 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( You do not have a USB drive connected && GoTo :EndIt
If "%_C:~,1%" Equ "%_C%" GoTo :Picked
Echo( Enter the USB drive letter from the above [%_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 "Do you want to delete all files from %1"
If ErrorLevel 2 Exit /B
REM Place your commands here for deleting from the selected drive
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...