2012-11-19 2 views
1

나는 여기에서 새롭다. 그리고 나의 영어는 그렇게 좋지 않다. 그래서 처음에, 용서해라.대괄호가이 Windows 파일에서 작동하지 않습니까?

제 문제는이 배치가 "IF EXIST % FSIZE %"변수의 문자열을 계속 읽는 것입니다. 나는 그 변수가 존재하지 않는다면, 그 배치는() 괄호 안의 계속 읽는 것을 나머지 훔침들로 옮기는 것을 의미한다.

% FSIZE %가 있으면 일괄 처리에서 다음과 같은 2 가지 작업을 수행합니다. (1) 크기가 동일하면 goto cifiles5x. (2) 크기가 같지 않으면 7z를 사용하여 파일을 추출합니다.

% FSIZE %가 존재하지 않으면 배치는 "765952가이 순간에 예상되지 않았습니다."라고 계속 말합니다.

숫자 값 (% size % EQU 765952)을 비교할 때 괄호 나 따옴표를 사용하지 말고 ss64.com에 대한 조언을 듣고 있는데 왜 끝나지 않는지 계속 이해하지 못합니다.

또한 "& &"으로 명령을 연결하려고 했으므로 대괄호를 지울 수 있지만 결과는 같습니다.

따옴표가없는 2 개의 간격 패치가 있음을 알고 있습니다. 나는 크기 검사기가 작동하지 않기 때문에 그들은 인용되지 않습니다.

감사합니다. 편집 : 제안 사항대로 일괄 수정.

@ECHO OFF 
TITLE Log checker 
COLOR 0F 
SET FSIZE=%ProgramFiles(x86)%\Ces\Log Files Ver\LogVbReg_r2.dll 
SET InsDIR=%ProgramFiles(x86)%\Ces\Log Files Ver\ 
REM I didn't add "" on FSIZE and InsDIR because if i did, quote the variable will 
REM result a doubled quoted patch and won't work. 
CLS 
ECHO ============================================================================== 
ECHO =        Log checker         = 
ECHO ============================================================================== 
ECHO Checking if exist: 
ECHO "%FSIZE%" 
IF EXIST "%FSIZE%" (
ECHO It does exist, checking size... 
FOR %%A IN ("%FSIZE%") DO SET SIZE=%%~ZA 
IF "%SIZE%" EQU "765952" 
ECHO Size is right, jumping to CIFILES5 
GOTO CIFILES5x 
) ELSE (
ECHO Size is not right, extracting the needed file... 
7z.exe e "Data_X.*" -o"%InsDIR%" -y "LogVbReg_r2.dll" 
GOTO CIFILES5x) 
ECHO Does not exist; extracting file... 
REN Data_X.* Data_X.exe 
Data_X.exe 
TIMEOUT 2>NUL 
REN DATA_X.* Data_X.dat 
:CIFILES5x 
ECHO Reach cifiles5x 
PAUSE 
IF EXIST "%TEMP%\9513.CES" (GOTO OPS) ELSE (GOTO LNKD) 

답변

0

파일 이름에 % FSIZE %의 공백이 있습니다. 공백 뒤에 나오는 결과 텍스트는 if에 대한 명령으로 처리됩니다. "%FSIZE%" 주위에 따옴표를 사용하거나 폴더에 먼저 CD을 입력하고 파일 이름 만 확인하십시오.

+0

제안 해 주셔서 감사합니다! 나는 이것을 다음과 같이 변경한다. (여전히 같은 문제) SET InsDIR = % ProgramFiles (x86) % \ Ces \ Log 파일 Ver \ CD "% InsDIR %" SET FSIZE = LogVbReg_r2.dll – user1834745

0

당신은 몇 가지 사소한 오류가 : 파일 이름에 공백이있을 수 있다면, 그것은 모든 경우에 따옴표로 묶어야합니다

  • : "%의 FSIZE의 %를"존재하는 경우

을 (

  • FOR/F는 CONTENTS 파일을 읽는 데 사용됩니다.당신은 파일 이름을 처리 할 경우, 명령에 대한/F 옵션을하지만, 일반 사용하지 마십시오 %% A의 ("%의 FSIZE의 %")의 경우

을 SET 크기 = %% ~ ZA

마십시오

GOTO CIFILES5x

) ELSE (

    :
    • 는 IF 명령의 ELSE 부분은 혼자 라인에 나타나야합니다 괄호에 대한
    • 같은 일 : 여는 괄호가 같은 줄에 나타나는 경우

    GOTO CIFILES5x

    )

    • 는 이외에서는. 이것은 올바른 : 존재하는 경우

    "% TEMP % \ 9513.CES"(GOTO의 OPS) ELSE (GOTO LNKD) 당신이 어떤지 번호 (EQU, NEQ)를 비교하면

    • 다음 돈 ' 그들이 따옴표로 묶인 지 여부. GTR, GEQ, LSS 및 LEQ의 경우에는 따옴표가 없어야합니다. 그러나 귀하의 경우에는 문제가되지 않습니다 ...
+0

철저한 답변 주셔서 감사합니다! 나는 네가하는 말을 시도해 봤지만 나는 계속해서 다른 오류가있다. 내 질문에 일괄 처리 인수를 수정했습니다; 다시 확인해보고 시도해 볼 수 있습니까? 이제 오류는 "명령 sintax가 올바르지 않습니다"입니다. – user1834745

관련 문제