2012-08-15 3 views
0

기본적으로 환경 변수가 설정되어 있는지 확인한 다음 설정하려고하는 간단한 간단한 배치 파일이 있습니다. 그 변수를 올바르게 설정하지, 그리고 내가 꽤 쓰고 스크립트에 대한 몇 가지 일반적인 질문을 가지고 일반적으로 배치 파일에 새로운 있습니다. 모든 통찰력은 인정 될 것이다. 여기에 내가 가진 질문들이있다.Windows 배치의 스크립팅

  1. 15 번 줄에서 디렉토리의 전체 이름을 모른다면 어떻게됩니까? 즉, 내가 '휘파람'이 그 일부 였음을 알고, 그것이 DIR인지 아닌지를 확인하고 싶다면?
  2. 16과 19 번 줄에서 필자는 'whistle-1.0.0'에 속한다면 BELFRAMEWORK_HOME 변수가 그 위의 1 디렉토리로 설정되어야한다는 것을 알고 있습니다. 나는 '% DIR % .. \'을 사용하여이 작업을 시도하지만 이것은 아무 효과가없는 것 같습니다. BELFRAMEWORK_HOME을 'whistle-1.0.0'위의 1 디렉토리로 설정하려면 어떻게해야합니까?
  3. 17 및 20 행에서 BELFRAMEWORK_HOME 변수가 인쇄되지 않습니다. 이유를 이해하지 못합니다. 왜냐하면 변수가 예상대로 변하는 줄 10과 12와 같은 형식이기 때문입니다. 왜 BELFRAMEWORK_HOME이 울리지 않습니까?
  4. 마지막으로,이 유형의 스크립팅에 대해 더 배우기위한 온라인 자료가 있습니까?

고마워요!

[email protected] off 
2 
3if not defined JAVA_OPTS (
4 set JAVA_OPTS=-Xmx1024m -Dderby.stream.error.field=org.openbel.framework.common.enums.DatabaseType.NULL_OUTPUT_STREAM 
5) else (
6 set JAVA_OPTS=%JAVA_OPTS% -Dderby.stream.error.field=org.openbel.framework.common.enums.DatabaseType.NULL_OUTPUT_STREAM 
7) 
8 
9set DIR=%CD% 
10echo "DIR/CD : %DIR%" 
11set DIR=%~dp0 
12echo "DIR/~dp0 : %DIR%" 
13 
14if not defined BELFRAMEWORK_HOME (
15 if "%DIR%"=="whistle-1.0.0" (
16  set BELFRAMEWORK_HOME=%DIR%\..\ 
17  echo "DIR == whistle, BELFRAMEWORK_HOME is now: %BELFRAMEWORK_HOME%" 
18 ) else (
19  set BELFRAMEWORK_HOME=%DIR%\..\ 
20  echo "DIR != whistle, BELFRAMEWORK_HOME is now: %BELFRAMEWORK_HOME%" 
21 ) 
22) 
23 
24set WHISTLE_HOME=%~dp0 
25java %JAVA_OPTS% -jar %WHISTLE_HOME%\whistle-1.0.0.jar %* 

답변

2

우, 하나 :-)

1)의 가격에 4 질문에 나는 당신이 일치 C:\folder\xxxxWHISTLExxxx\ 같은 것을 할 생각하지만,하지 C:\xxxxWHISTLExxxx\folder\ 같은. 그렇다면 FINDSTR을 정규 표현식과 함께 사용하여 마지막 디렉토리가 WHISTLE과 일치하는지 확인해야합니다. 검색은 대소 문자를 구분하지 않아야합니다.

FINDSTR 출력을 원하지 않습니다. 문자열이 있는지를 알고 싶을뿐입니다. 발견되지 않으면 1을 리턴하고 발견되면 0을 리턴합니다 (성공). 당신이 후행 백 슬래시를 원하는 경우에는 후행 백 슬래시를 원하지 않는 경우

echo %DIR% | findstr /irc:"whistle[^\\]*[\\]*$" >nul && (
    rem Code for success (string found) 
) 
    rem Code for failure (string not found) 
) 

2), 당신은 사용

for %%A in ("%DIR%\.") do set "BELFRAMEWORK_HOME=%%~dpA" 

을 사용할 수 있습니다

for %%A in ("%DIR%\..") do set "BELFRAMEWORK_HOME=%%~fA" 

3) 새로운 일괄 처리 사용자에게 고전적인 장애물이 있습니다. 줄을 파싱 할 때 % BELFRAMEWORK_HOME %가 확장되고 괄호 안의 코드 블록을 포함하여 전체 IF 문은 하나의 문으로 구문 분석됩니다. 따라서 확장 된 값은 IF 문이 실행되기 전에 있던 값입니다.

지연된 확장을 사용하여 문제를 해결할 수 있습니다.

@echo off 
setlocal enableDelayedExpansion 
set var=BEFORE 
(
    set var=AFTER 
    echo within block normal expansion = %var% 
    echo within block delayed expansion = !var! 
) 
echo after block normal expansion = %var% 

위의 결과는 다음

4)

within block normal expansion = BEFORE 
within block delayed expansion = AFTER 
after block normal expansion = AFTER 
내가 좋아하는 배치 스크립트 웹 사이트

+0

고마워요! 나는 배치 파일을 작동시킬 수있을뿐만 아니라이 스크립트에서 무슨 일이 일어나고 있는지 더 잘 이해하고있는 것처럼 합법적으로 느낀다. 훌륭한 참고 자료들도 많이 읽으겠습니다. 내가 네가 네 체크 마크를 줄 수 있다면 :) – Houdini

관련 문제