2017-01-12 1 views
2

나는 배치 파일을 쓰고 있으며 간단한 프로젝트로 시작하여 큰 프로젝트로 눈싸움하기 시작했습니다. 더 많은 것을 배우면서 더 많은 것을 구현하고 싶습니다. 따라서 필자의 스크립트의 기본은 여러 SD 카드의 형식 및 파일 복사 프로세스를 자동화하고 두 가지 형식 중에서 선택할 수있는 기능을 사용하기 위해서입니다. 공정한 경고 :이 명령 중 일부는 this genius (제 말은 정중하게 말함)의 타사 소프트웨어입니다. 여기에 지금까지 함께 온 것입니다 : 내 변수에 SD1변수에 여러 개의 드라이브 문자 할당

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 

:

@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 

내 문제는 내가 코드 섹션에서 발견 된 드라이브 문자를 할당 할 수 있도록하려는 것입니다 및 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

내가 .... 바이 나는 당신의 문제가 무엇인지 이해하는 경우없는 확신에 대한 정보가에 대한 http://ss64.com/nt/if.html를 참조하십시오 당신이 제공 한 코드는 불필요하게 보이지만 정확하게 작은 스 니펫으로 무엇을 얻으려고하는지, 무엇보다 중요한 것은 무엇입니까? – geisterfurz007

+1

이 도움말 항목을 읽으십시오 : [mcve]! – aschipfl

답변

1

을 찾고 결국 무엇인가 문

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 
) 
) 
) 

하다면 문을

+1

고맙습니다. 나는 그런 생각조차하지 않았다. 뇌의 모든 포도당은 그 시점까지 다 소비되었습니다. 나는 그것이 단순해야만한다는 것을 알았다. 다시 한번 나는 스크립트 작성에 익숙하지 않고 유창하지 않다. 다시 한 번 감사드립니다! – LucidDulcimer