2014-12-22 2 views
1

파일이 비어 있는지 확인해야합니다. 파일이 비어 있으면 무언가를하십시오; 그렇지 않으면 다른 것을하십시오.줄을 건너 뛰는 방법/if 문을 여러 개 실행하는 경우 if 문을 실행하고 나머지는 건너 뛰는 방법

이 목표를 달성하기 위해 if 문 안에서 for 문을 사용합니다. 그런데 스크립트 작성 방법은 파일이 비어 있지 않은 경우에만 작동합니다.

문제점 : test.txt 파일 안에 데이터가 없으면 배치 파일에 fault와 : true가 모두 표시됩니다. 나는 "skip = 5"로 실제 조건을 건너 뛰려고했으나 실패했다. 나는 스킵 문을 잘못 작성했다고 생각했다.

내가 원하는 것 : test.txt에 데이터가 있으면 : true가 실행됩니다. test.txt에 데이터가 없으면 : fault가 실행됩니다. 에코 문은 오류 조건 또는 : 참 조건 후에 실행됩니다.

for %%f in (test*.txt) do 
    if %%~zf EQU 0 goto fault 
    if %%~zf NEQ 0 goto true 

:fault 
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 
REM Goto skip =5 

:true 
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 
Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y 

echo.... 
echo.... 

답변

1

skip=..FOR /F 옵션이며 IF으로 아무것도 할 것입니다 .And GOTO 휴식 for가 첫 번째 파일을 통해 실행됩니다 있도록 컨텍스트 (실종 코드에 대괄호가 있다는 것을 염두에 있습니다). 하나의 파일 만 처리하려는 경우 각 섹션의 끝에 다른 GOTO을 사용할 수 있습니다.

for %%f in (test*.txt) do (
    if %%~zf EQU 0 goto fault 
    if %%~zf NEQ 0 goto true 
) 
:fault 
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 

goto :end_if 

:true 
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 
Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y 

goto :end_if 


:end_if 
echo.... 
echo.... 

또는 GOTO가 성능이 저하하고 마스크에 적용되는 모든 파일을 처리 할 수 ​​있습니다 당신은 괄호에 식을 넣을 수 있습니다.

for %%f in (test*.txt) do (
    if %%~zf EQU 0 (
     Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 
    ) else (
     Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y 
     Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y 
    ) 
) 
+0

자세한 설명은 npocmaka에 감사드립니다. & if 문에 대해 조사했을 때, 어떤 사람들은 else 문을 사용할 수 없다고 말했습니다. else 문을 사용할 수 없을 때 조언 해 주시겠습니까? – baciyan

+0

if else 문을 시도했지만 시스템이 내부에서 아무 것도 읽지 않습니다. 이유가 무엇인지에 대해 알고 있습니까? – baciyan

+0

시스템은 if 문을 읽을 것입니다. 그저 if 문을 썼을 때만 가능합니다. 이유에 대해 조언 해 주시겠습니까? 공백이나 새 줄이 내 스크립트를 일괄 처리합니까? – baciyan

관련 문제