Перечислите USB-устройства и выберите одно из них в качестве резервного пакетного файла.

поэтому я пишу небольшой пакетный файл, который делает несколько полезных вещей, но у меня возникли проблемы с одной конкретной, я использую эту команду:

set /p choice="Press Enter to show available Backup USB Drives" if "%choice%"=="" wmic logicaldisk where drivetype=2 get deviceid, volumename,

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


person Wolf    schedule 11.02.2016    source источник
comment
К сожалению, у меня нет USB-накопителей для подключения, чтобы посмотреть, что выводит эта команда WMIC. Не могли бы вы отредактировать свой вопрос, чтобы показать вывод команды. Спасибо.   -  person Squashman    schedule 11.02.2016
comment
вывод: Описание:Removable Disk DeviceID:E: VolumeName:CORSAIR   -  person Wolf    schedule 11.02.2016


Ответы (2)


Это отобразит все доступные диски и проверит, является ли ответ допустимым диском (присутствует в списке):

@echo off

setlocal enabledelayedexpansion

:: Creating a list with all USB drive

for /f "delims=" %%a in ('wmic logicaldisk where drivetype^=2 get deviceid ^| find ":"') do set "$List=!$List! %%a"

::Your Menu

:menu
set /p choice="Press Enter to show available Backup USB Drives" 
if "%choice%"=="" goto:USB
goto:menu

exit/b

::Displaying available drive and asking to choose one

:USB  
echo Avaiable Drive ==^> !$List!
set /p "$Drive=Enter the letter of the Backup drive : "
cls

::Testing the availibility of the choosed drive in the List

echo !$List! | find /i "%$Drive::=%:" && Echo drive OK || Echo drive do not exist && goto:USB

Вместо Echo drive OK вы можете сделать Goto:next и использовать !$Drive! в качестве выбранного диска.

person SachaDee    schedule 11.02.2016
comment
Предоставленный скрипт показывает только 2 устройства, если у меня есть более 2 устройств, они не будут отображаться, как я могу изменить его, чтобы отображались все USB-устройства? - person Wolf; 12.02.2016

:-) я создал переменную, которую вводит пользователь, вместо того, чтобы выбирать из фактического списка, пользователь просто вводит букву диска, например: G: я понял, что даже если я создам реальный список, пользователь все равно должен ввести на диске, который он хочет использовать, так почему бы не использовать введенную букву диска в качестве переменной и не добавить ее в командную строку xcopy, вот весь код маленькой утилиты, позже я добавлю небольшое дерево папок, чтобы выбрать источник резервной копии лучше, чем просто вводить его вручную

`@echo off
:: variables
set backupcmd=xcopy /w /S /D /E /H /I /R /-Y
:start
echo =====================
echo   Backup Utility
echo =====================
echo.
set /p sourcepath=  Enter Folder or Drive path to be Copied:
echo.
ECHO =======================================================
echo Backup Source Path: %sourcepath%
ECHO =======================================================
echo.
set /p choice="Press Enter to show available Backup USB Drives"
ECHO ======================================================= 
echo.
if "%choice%"=="" wmic logicaldisk where drivetype=2 get deviceid,       
volumename, description
echo.
ECHO =======================================================
echo.
ECHO =======================================================
set /p backuppath= Enter Backup Destination, Use DeviceID (e.g: E:):
echo You selected %backuppath% as your Backup destination 
ECHO =======================================================
echo.
echo =======================================================
echo.
echo Backup Sourcepath Selected=  %sourcepath%
echo Backup Destination Selected= %backuppath%
echo.
echo========================================================
ECHO.
set /p choice="If it looks good, Press Enter to Continue, or 0 to Start   
Over: " 
ECHO.
if "%choice%"=="" goto Backup Files
if "%choice%"=="0" goto start
pause

:Backup Files
echo =========== Ready to Back up your Files ===========
ECHO.
%backupcmd% "%sourcepath%" "%backuppath%"
ECHO.
echo Success!!
echo Finished at:
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%a-%%b-%%c)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)
echo %mytime% %mydate%
start %backuppath%
echo =====================================================
echo.
goto start`
person Wolf    schedule 11.02.2016
comment
Таким образом, у вас нет никакого контроля над существующим USB-накопителем. Чтобы проверить, входит ли пользователь в существующий. Программно это очень плохое решение. Вместо этого у вас есть полное рабочее решение. - person SachaDee; 12.02.2016