2015-01-28 1 views
1

의 문은 내가이상한 행동 배치

에서 일하고 있어요 내가 로컬 wget과 버전 파일과 업데이터를 실행 고려하고 아직 내가 사용 (내 서버에서 호스팅하는 매우 간단한 배치 스크립트가있는 경우 어떤 이유로 일괄)

@echo off 
for /f "tokens=* delims=" %%x in (version.txt) do set version=%%x 
if "%version%" == "1.0.0" (echo yes) 

이 참조의 텍스트 파일도

1.0.0 

아니 새로운 라인만을 포함되어 있지 않습니다. %version%을 반향 시키면 콘솔에 1.0.0이 표시되지만 if 문에는 아무 것도 표시되지 않습니다.

누구든지 내 오류를 지적하고 싶습니까? 나는 솔직히 단서가 없다.

답변

3

set 명령 끝 부분에 난잡한 공간이있는 것 같습니다.

배치는 SET 문에서 공백에 민감합니다. SET FLAG = N는 "공간 N"

SET "var=value"이 (값이 비어 될 수있다) 상관 미광 후행 공백 값에 포함되지 않도록하기 위해 사용되는 구문에 대한 값을 "FLAG 공간"라는 변수를 설정 할당 됨. set /a은 "quoteless"로 안전하게 사용할 수 있습니다.

+0

위대한 마음은 똑같다고 생각합니다. +1. – rojo

+0

그래서, 당신이 말하는 것을 이해하고 있다고 생각합니다. – StuAlex

+0

새 창에 대한 덧글 – StuAlex

2

이것은 까다 롭습니다. set version=%%x 끝에 공백이 있습니다.

일반적인 스크립트 작성 규칙으로, 배치 스크립트에서 변수를 문자열로 설정할 때마다 특별한 이유가없는 한 set "variable=value"에 var = value 쌍을 인용 부호로 묶어야합니다. 이렇게하면 이런 문제를 피할 수 있습니다. for /f 행은 set "version=%%x"으로 끝나야합니다.

뒤에 공백이있는 경우 기본적으로는 if "1.0.0 " == "1.0.0"이며 false입니다.

원하는 경우 웹 서버 without using wget에서 콘텐츠를 가져올 수 있습니다.