2017-02-17 1 views
0

여기에 내용이 누락되었지만 볼 수 없습니다. 나는 그것이 변수가 호출되는 방식으로 뭔가를 가질 것이라고 확신하지만 그것을 얻지는 못한다.Diskpart 출력의 문자열 비교

내 목표는 파일을 SD 카드에서 이동식 드라이브 쌍으로 복사하는 범용 스크립트를 작성하는 것입니다. 키는 연결된 드라이브와 드라이브 문자에 관계없이 백업이 일관성이 있는지 확인합니다.

필자가 원했던 일종의 스크립트를 함께 자필했지만 필자는 세부 사항을 놓치고 있습니다.

아래 코드는 DiskPart를 사용하여 연결된 드라이브의 파일을 만드는 데이터 덤프를 수행합니다. 그런 다음 파일을보고 드라이브 레이블을 대상으로 사용합니다. 드라이브 레이블에 따라 원본 또는 대상으로 표시됩니다.

조각 아래

내가 DOS를 사용하고 있습니다 "(부분 라벨"CAMX "있는 드라이브를 찾고) 문자열 비교 문자열을 대체 IF의 시점까지 작동하고, 다른 경우 즉,이다 당신이 원하는 것 "이 접근하므로"NEQ "연산자를 사용하십시오.

현재 NEQ는 모든 결과를 볼 수 없으며 동등하지 않습니다. 연산자를 EQU로 변경하면 반환 값이 없습니다.

비교되는 문자열에 대한 두 개의 "반향"은 디버그입니다. 이 값들을 보면, 나는 그들이 기대하는 것과 matchvar : CAMX =! 일하고있다.

여기 여기에 코드를

@echo off 
cls 
title "Detecting device drive letters..." 
setlocal enabledelayedexpansion 

echo Detecting device drive letters... 

:: Create a script file to be used by diskpart and then dump all volumes to a temp file 
    echo list volume > %systemdrive%\ListDrives.tmp 
    diskpart /s %systemdrive%\ListDrives.tmp > %systemdrive%\CurrentDrives.tmp 

:: Parse the output from 'Diskpart> list volume' for available volumes 

    echo Checking drive IDs 
    FOR /F "tokens=2-4" %%a IN (%systemdrive%\CurrentDrives.tmp) DO (set matchvar="%%c" & set comparevar=!matchvar:CAMX=! & IF /I !comparevar! NEQ !matchvar! @echo Drive %%b was found to be %%c and will SOURCE...%%a & @echo !matchvar! & @echo !comparevar!) 

있어 내가

Microsoft DiskPart version 10.0.10586 

Copyright (C) 1999-2013 Microsoft Corporation. 
On computer: NEWGLOOMWIN10 

    Volume ### Ltr Label  Fs  Type  Size  Status  Info 
    ---------- --- ----------- ----- ---------- ------- --------- -------- 
    Volume 0  D      DVD-ROM   0 B No Media   
    Volume 1  E Macintosh H HFS Partition 231 GB Healthy    
    Volume 2  C BOOTCAMP  NTFS Partition 721 GB Healthy System 
    Volume 3  F TEAMXCAMX FAT Removable 1937 MB Healthy    
    Volume 4  G TEAM1DRIVE3 NTFS Partition 3725 GB Healthy 

생각납니다 조언은 절상 Diskpart는 파일입니다.

편집 : 근본적으로 잘못된 것이 있습니다. @abelenky에 의해 제안 된 문자열 비교에 대한 올바른 구문을 사용하여 코드를 변경하고 같음 연산자를 사용하여 일치하는 문자열에 넣으면 여전히 모든 값을 반환합니다. "IF"는 무시되지 않지만 변수 값은 평가되지 않는 것처럼 보입니다.

IF /I "TEAMXCAMX" == !matchvar! 

답변

1

실행 명령의 큰 팬이 아닙니다. 그것은 영어의 문장에서 실행과 같은 종류입니다.

모범 사례를 사용하기 위해 코드를 약간 편집했습니다. 입력 한 텍스트 파일을 사용했습니다.

@echo off 
cls 
title "Detecting device drive letters..." 
setlocal enabledelayedexpansion 

echo Detecting device drive letters... 

:: Create a script file to be used by diskpart and then dump all volumes to a temp file 
REM echo list volume > %systemdrive%\ListDrives.tmp 
REM diskpart /s %systemdrive%\ListDrives.tmp > %systemdrive%\CurrentDrives.tmp 

REM Parse the output from 'Diskpart> list volume' for available volumes 

echo Checking drive IDs 
FOR /F "skip=7 tokens=2-4" %%a IN (CurrentDrives.txt) DO (
    set "matchvar=%%c" 
    set "comparevar=!matchvar:CAMX=!" 
    IF /I NOT "!comparevar!"=="%%c" echo Drive %%b was found to be %%c and will SOURCE...%%a 
    echo %%c !comparevar! 
) 

pause 

출력

Detecting device drive letters... 
    Checking drive IDs 
DVD-ROM DVD-ROM 
Macintosh Macintosh 
BOOTCAMP BOOTCAMP 
Drive F was found to be TEAMXCAMX and will SOURCE...3 
TEAMXCAMX TEAMX 
TEAM1DRIVE3 TEAM1DRIVE3 
Press any key to continue . . .