2017-01-12 2 views
2

Я пишу командный файл и то, что начиналось так просто, началось в снежный ком в более крупный проект. Чем больше я изучаю, тем больше я хочу реализовать. Поэтому основой моего сценария является то, что я хочу, чтобы он автоматизировал процесс форматирования и копирования файлов из нескольких SD-карт и возможность выбирать между двумя различными форматами. Справедливое предупреждение: некоторые из этих команд являются сторонним программным обеспечением от this genius (я имею в виду это с уважением). Вот что я придумал до сих пор:Назначьте несколько букв накопителя переменным

@echo off 

REM Set the variables below for the file path for the bin file and the drive letters for the sd cards. 

SET BIN_PATH= 
SET SD1= 
SET SD2= 

:start 
Title Insert SD Cards 
cls 
echo. 
echo. 
echo. 
echo. 
echo Insert SD cards into the readers. 
echo. 
echo. 
echo. 
echo. 
pause 

:ListDrives 
Title Drives present? 
restartsrdev %SD1%: 
restartsrdev %SD2%: 
cls 
sleep 1 
ECHO. 
ECHO. 
ECHO Are drives %SD1% and/or %SD2% listed below? 
ECHO. 
ECHO. 
wmic logicaldisk get description,name 
ECHO. 
ECHO. 
ECHO (Y) YES 
ECHO (N) NO 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='Y' goto FormatChoice 
if '%choice%'=='y' goto FormatChoice 
if '%choice%'=='N' goto Reseat 
if '%choice%'=='n' goto Reseat 
ECHO "%choice%" is not valid, try again 
Pause. 
GoTo ListDrives 

:FormatChoice 
Title FS Preferance 
cls 
echo. 
echo. 
echo Format to EXT4 or FAT32? 
echo. 
echo. 
echo. 
ECHO (1) FAT32 
ECHO (2) EXT4 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='1' goto FormatFAT32 
if '%choice%'=='2' goto FormatEXT4 
ECHO "%choice%" is not valid, try again 
Pause. 
GoTo FormatChoice 

:FormatEXT4 
Title Formatting SD Cards to EXT4 
cls 
echo. 
mke2fs -t ext4 -L Label %SD1%: 
echo. 
echo. 
mke2fs -t ext4 -L Label %SD2%: 
echo. 
echo. 
start "Copying BIN to %SD1%:" cmd /c Robocopy %BIN_PATH% %SD1%:\ /e 
start "Copying BIN to %SD2%:" cmd /c Robocopy %BIN_PATH% %SD2%:\ /e 
echo. 
echo. 
pause 
removedrive %SD1%: -l -47 -e 
echo. 
removedrive %SD2%: -l -47 -e 
GoTo Choose 

:FormatFAT32 
Title Formatting SD Cards to FAT32 
cls 
echo. 
echo. 
echo. 
format %SD1%: /fs:FAT32 /V:"" /Q /X 
echo. 
echo. 
echo. 
format %SD2%: /fs:FAT32 /V:"" /Q /X 
echo. 
echo. 
echo. 
start "Copying BIN to %SD1%:" cmd /c Robocopy %BIN_PATH% %SD1%:\ /e 
start "Copying BIN to %SD2%:" cmd /c Robocopy %BIN_PATH% %SD2%:\ /e 
echo. 
cls 
echo. 

:Choose 
cls 
Title Transfer Complete 
echo. 
echo. 
echo. 
echo. 
echo Please remove the SD cards from the readers. 
echo. 
echo Want to do it again? 
ECHO. 
ECHO (1) Format again 
ECHO (2) Exit 
ECHO. 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='1' goto start 
if '%choice%'=='2' goto Exit 
ECHO "%choice%" is not valid, try again 
ECHO. 
pause. 
goto choose 


:Exit 
Exit 

:Reseat 
Title Reseat SD Cards 
cls 
echo. 
echo. 
echo. 
echo. 
echo Reseat the SD cards in the readers or 
echo  turn the USB hub off/on 
echo. 
echo. 
echo. 
pause 
GoTo ListDrives 

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

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

if %%l equ 2 (
SET SD1=%%i 
SET SD2=%%i 
     ) 
     ) 
ECHO Are drives %SD1% and/or %SD2% listed below? 
pause 

моих переменных SD1 и SD2. В одно время никогда не будет подключено более двух считывателей SD-карт, так что это не проблема. Любое понимание было бы весьма признателен. Я провел много исследований, и прошу прощения, если это простое решение, но я стучу головой о стену здесь.

UPDATE: Вот что окончательный сценарий в конечном итоге глядя, как в случае, если кому-то интересно ...

@echo off 

:start 
Title Insert SD Cards 
cls 
echo. 
echo. 
echo. 
echo. 
echo Insert SD cards into the readers. 
echo. 
echo. 
echo. 
echo. 
pause 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i 
) ELSE (
set SD2=%%i 
) 
) 
) 
cls 

:ListDrives 
Title Drives present? 
cls 
sleep 1 
ECHO. 
ECHO. 
ECHO Are drives %SD1% and/or %SD2% listed below? 
ECHO. 
ECHO. 
wmic logicaldisk get description,name 
ECHO. 
ECHO. 
ECHO (Y) YES 
ECHO (N) NO 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='Y' goto FormatChoice 
if '%choice%'=='y' goto FormatChoice 
if '%choice%'=='N' goto Reseat 
if '%choice%'=='n' goto Reseat 
ECHO "%choice%" is not valid, try again 
Pause. 
GoTo ListDrives 

:FormatChoice 
Title FS Preferance 
cls 
echo. 
echo. 
echo Format to EXT4 or FAT32? 
echo. 
echo. 
echo. 
ECHO (1) FAT32 
ECHO (2) EXT4 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='1' goto FormatFAT32 
if '%choice%'=='2' goto FormatEXT4 
ECHO "%choice%" is not valid, try again 
Pause. 
GoTo FormatChoice 

:FormatEXT4 
Title Formatting SD Cards to EXT4 
FOR /F "tokens=1" %%I in (BIN_PATH.TXT) do SET BIN_PATH=%%I 
FOR /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i 
) ELSE (
set SD2=%%i 
) 
) 
) 
cls 
echo. 
mke2fs -t ext4 -L Label %SD1% 
echo. 
echo. 
mke2fs -t ext4 -L Label %SD2% 
echo. 
echo. 
start "Copying BIN to %SD1%" cmd /c Robocopy %BIN_PATH% %SD1%\ /e 
start "Copying BIN to %SD2%" cmd /c Robocopy %BIN_PATH% %SD2%\ /e 
echo. 
echo. 
pause 
removedrive %SD1% -L -47 -e -i 
echo. 
removedrive %SD2% -L -47 -e -i 
GoTo Choose 

:FormatFAT32 
FOR /F "tokens=1" %%I in (BIN_PATH.TXT) do SET BIN_PATH=%%I 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i 
) ELSE (
set SD2=%%i 
) 
) 
) 
Title Formatting SD Cards to FAT32 
cls 
echo. 
echo. 
echo. 
format %SD1% /fs:FAT32 /V:"" /Q /X 
echo. 
echo. 
echo. 
format %SD2% /fs:FAT32 /V:"" /Q /X 
echo. 
echo. 
echo. 
start "Copying BIN to %SD1%" cmd /c Robocopy %BIN_PATH% %SD1%\ /e 
start "Copying BIN to %SD2%" cmd /c Robocopy %BIN_PATH% %SD2%\ /e 
echo. 
cls 

:Choose 
cls 
Title Transfer Complete 
echo. 
echo. 
echo. 
echo. 
echo Please remove the SD cards from the readers. 
echo. 
echo Want to do it again? 
ECHO. 
ECHO (1) Format again 
ECHO (2) Exit 
ECHO. 
set choice= 
set /p choice= 
if not '%choice%'=='' set choice=%choice:~0,99% 
if '%choice%'=='1' goto start 
if '%choice%'=='2' goto Exit 
ECHO "%choice%" is not valid, try again 
ECHO. 
pause. 
goto choose 


:Exit 
Exit 

:Reseat 
Title Reseat SD Cards 
cls 
echo. 
echo. 
echo. 
echo. 
echo Reseat the SD cards in the readers or 
echo  turn the USB hub off/on 
echo. 
echo. 
echo. 
pause 
GoTo ListDrives 
+0

Я не уверен, если я понимаю, что ваша проблема .... Би- g, который вы предоставили, кажется ненужным, но что именно вы пытаетесь достичь с меньшим фрагментом и, что самое важное: в чем ваш вопрос? – geisterfurz007

+1

Прочтите эту тему справки: [mcve]! – aschipfl

ответ

1

Так вы говорите, что никогда не будет больше, чем два подключен, вы можете просто использовать другой IF заявление

set SD1= 
set SD2= 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i 
) ELSE (
set SD2=%%i 
) 
) 
) 

См http://ss64.com/nt/if.html для получения информации о IF заявления

+1

Спасибо. Я даже не думал об этом. К этому моменту вся глюкоза в мозге была израсходована. Я знал, что это должно быть что-то простое. Еще раз я новичок в написании сценариев и не слишком свободно говорю. Еще раз спасибо!! – LucidDulcimer

Смежные вопросы