2010-03-11 6 views
2

나는 간단한 배치 파일을 쓰고 있어요 그리고 난 이것을 경우 진술서 좀 배치 파일에 대한 오류 "명령의 구문이 올바르지 않습니다"얻을 수있다 아래 :간단한 박쥐 파일 작성?

@echo off 

set ARCH=%PROCESSOR_ARCHITECTURE% 

if %ARCH% == 'x86' 
(
) 

또한

if %ARCH% EQU 'x86' 
시도

if 문에 어떤 문제가 있습니까?

답변

5

@echo off 
set ARCH=%PROCESSOR_ARCHITECTURE% 
if %ARCH% == x86 (echo ok) 
rem or %ARCH% EQU x86 

시도하고 당신이 그것을에있는 동안, 왜 안 learn vbscript뿐만 아니라, 여기에 해당하는

Set WshShell = WScript.CreateObject("WScript.Shell") 
Set Wsharch = WshShell.Environment("SYSTEM") 
arch=Wsharch.Item("PROCESSOR_ARCHITECTURE") 
If arch = "x86" Then 
    WScript.Echo "PROCESSOR_ARCHITECTURE is x86" 
End If 
' if Instr(arch,"86") > 0 then 
+0

이렇게했습니다. 감사. 실제로 아키텍처에 문자열 64가 들어 있는지 확인하고 싶습니다. % ARCH % == '* 64 *'(echo ok) if 어떻게 할 수 있습니까? – Sam

+0

저는 배치 전문가가 아니므로 누군가 도와 드리길 바랍니다. 그러나 vbscript가 문자열, 정규 표현식 및 배열, 사전 등과 같은 더 나은 데이터 구조를 검색하는 것과 같이 더 쉽게 원하는 것을 수행한다는 것을 알고 있습니다. 관심이 있다면 대신 vbscript를 사용하는 방법을 배웁니다. – ghostdog74

+0

이미 완료되었습니다 :-). 그래도 배열과 사전은 환경 변수가있는 배치 파일에서 자연스럽게 나옵니다. 그들은 일종의 잡동사니입니다. ;-) – Joey

4

ETA의 :

는 사실 내가 확인하려면 아키텍처에 문자열 64가 포함되어있는 경우. 다음과 같은 문자가 사용됩니다.

if %ARCH% == '*64*' (echo ok) 

어떻게하면됩니까?

이렇게하려면 파일 또는 명령 출력의 패턴을 검색하는 findstr이라는 멋진 작은 도구를 사용하면됩니다. 그냥 파이프 findstr에 변수의 값 :

echo %ARCH% | findstr 64 

곳 (64)를 포함하는 출력의 모든 라인을 찾을 수 있습니다. 이 경우에는 한 줄 밖에 없지만 괜찮습니다. 무으로 (에러 메시지 등) 출력을 리디렉션

echo %ARCH% | findstr 64 > nul 2>&1 

을 :

그러나 이것은 또한 화면에 출력 될 수 있으므로 아래로 그것을 변경 라인을 야기한다.

이제 findstr은 문자열이 발견되었는지 여부에 따라 특수 값 (종료 코드 또는 오류 수준)을 설정합니다. 원래의 질문에

echo %ARCH% | findstr 64 > nul 2>&1 
if errorlevel 1 (
    echo 64 did NOT appear (error level greater 0 usually means failure) 
) else (
    echo 64 DID appear 
) 

:

여는 괄호 해야if 같은 줄에 발생 사실 64 출력에 출연 여부를 테스트하기 위해 그것을 사용할 수 있습니다 진술 문 자체 :

@echo off 

set ARCH=%PROCESSOR_ARCHITECTURE% 

if %ARCH% == x86 ( 
    rem ... 
) 

작동하지 않습니다.

cmd의 파서는 줄 단위입니다. 따라서 여러 줄에 걸쳐 있어야하는 것은 무엇이든주의해야합니다.

@echo off 

set ARCH=%PROCESSOR_ARCHITECTURE% 

if %ARCH% == x86^
( 
    rem ... 
) 

^cmd 및 파서의 일환으로 다음 줄에 여는 괄호를 받아 있도록이 효과적으로 줄 연속 연산자의 사용에 이스케이프 문자는 다음과 같습니다 또 다른 옵션은 줄 바꿈을 탈출하는 것 현재 문장 (일반적으로 줄 바꿈으로 종료됩니다).

그렇습니다. cmd에있는 모든 문자가 문자열 리터럴이기 때문에 비교에서 리터럴 문자열 값에 작은 따옴표를 사용하면 Carlos Gutiérrez으로 표시된 다른 문제가 발생할 수 있습니다. 그래서 당신은 실제로 환경 변수에 포함되어있는 것을

x86 

'x86' 

대신 리터럴 문자열과 비교 될 것이다.