2013-12-11 2 views
1

배치 파일을 작성하는 데 경험이 없지만 목표가 어렵지 않게 보입니다. 나는 사용자에게 ID 번호를 입력 한 다음 .jpg 디렉토리를 검색하고 ID 번호가있는 사진을 별도의 디렉토리에 복사하라는 작은 스크립트를 작성하려고합니다. .jpg는 이름 xxxxxx_zzz.jpg입니다. 여기서 xxxxxx는 최대 6 자리의 ID 번호이고 zzz는 시퀀스 번호입니다. 등 123456_001.jpg, 123456_002.jpg, 123456_003.jpg,IF 및 GOTO 문을 올바르게 사용하는 방법

내가 여러 IFGOTO 명령을 해본 적이을,하지만 난 내 목표에서 발산하는 것 같다 예를 들어, 하나 개의 ID 많은 사진을 가질 수 있습니다. 나는 현재 아래 사용하고있는 두 IF 문이 쓰레기를 알고,하지만 난 내가 이동해야한다고 생각의 방향을 전달하기 위해 구문을 떠났다.

내가 GOTO 명령을 사용하는 IF 문을 얻을 수 없다 . 나는 또한 레이블이 어떻게 작동해야하는지 완전히 이해하고 있다고 생각하지 않는다.

@ECHO OFF 
    CLS 
:START 
    DEL /q C:\Users\ADMIN\Desktop\temp\*.* 
:GETINPUT 
    set /p propkey=Enter the Property Key of pictures to retrieve.: 
    IF EXIST C:\Users\ADMIN\Desktop\photos\*%propkey%_???.jpg GOTO Success 
    IF "%propkey%"=="" ECHO No Property Key was entered. GOTO START 
:Success 
    ECHO Pictures from Property Key %propkey% will now be moved to the Temp folder on the Desktop. && PAUSE 
    COPY "C:\Users\ADMIN\Desktop\photos\*%propkey%*.jpg" "C:\Users\ADMIN\Desktop\temp\" 
    START C:\Users\ADMIN\Desktop\temp\ 
:END 
+0

@npocmaka IF EXIST는 실제로 파일 이름에 와일드 카드를 지원합니다. – Tony

답변

0

이 시도 :

:Start 
    @echo off 
    cls 
    :: store source folder 
    set _sd=C:\Users\ADMIN\Desktop\photos 
    :: store target folder 
    set _td=C:\Users\ADMIN\Desktop\temp 
:CheckFolders 
    if not exist %_sd% echo Source folder not found.&goto End 
    if not exist %_td% echo Target folder not found.&goto End 
    :: wipe target folder 
    del /q %_td%\*.* 
:GetKey 
    set /p _key=Enter the property key: 
    if '%_key'=='' echo No property key entered. Please retry.&goto GetKey 
    if not exist "%_sd%\*%_key%*.jpg" echo No photos matched the key.&goto End 
    echo Copying pictures to %_td%... 
    copy "%_sd%\*%_key%*.jpg" "%_td%" 
:OpenFolder 
    start "%windir%\explorer.exe" "%_td%" 
:End 

라벨이 임의로 배치 파일에서 줄을 지정하는 방법입니다. 이 명령은 GOTO 명령에 의해 명령 실행의 일반적인 위쪽에서 아래쪽으로의 진행을 변경하고 다음에 처리해야 할 줄을 지정하는 데 사용됩니다. 여러분이 알고있는 것처럼 IF 명령을 GOTO과 함께 사용하면 값이 맞거나 오류가 발생하는 경우와 같은 조건부 처리가 가능합니다.

라벨의 또 다른 용도는 문서화 또는 명료성을위한 것입니다. 위의 예에서 "CheckFolders"는 GOTO에 사용되지 않지만 프로그래머는 코드 섹션에서 힌트를 제공합니다.

0

와일드 카드가 if exist에서 작동하지만 특정 조합이 실패 할 수 있습니다. 또한 경로에 공백이 포함될 수있는 경우 이름을 따옴표로 묶어야합니다. 시도해보십시오.

IF EXIST "C:\Users\ADMIN\Desktop\photos\*%propkey%_*.jpg" GOTO Success 

IF "%propkey%"=="" ECHO No Property Key was entered. & GOTO START 
0

코드가 매우 근접했습니다. 메인 루틴으로 빠져 나가는 것을 막기 위해서는 goto :eof이 필요했습니다. echo 문이없는 경우 &&&으로 변경하고 &으로 변경하십시오. 무해한 오류 메시지를 피하기 위해 goto start을 다음 레이블로 변경했습니다.

@ECHO OFF 
    CLS 
:START 
    DEL /q C:\Users\ADMIN\Desktop\temp\*.* 
:GETINPUT 
    set /p propkey=Enter the Property Key of pictures to retrieve.: 
    IF EXIST "C:\Users\ADMIN\Desktop\photos\*%propkey%_???.jpg" GOTO Success 
    IF "%propkey%"=="" ECHO No Property Key was entered. & GOTO GETINPUT 
    goto :EOF 
:Success 
    ECHO Pictures from Property Key %propkey% will now be moved to the Temp folder on the Desktop. & PAUSE 
    COPY "C:\Users\ADMIN\Desktop\photos\*%propkey%*.jpg" "C:\Users\ADMIN\Desktop\temp\" 
    start "" "C:\Users\ADMIN\Desktop\temp" 
:END 
관련 문제