2012-02-02 3 views
2

윈도우 배치 파일을 유닉스 쉘 스크립트로 변환 :유닉스에서 작동하지만 윈도우 배치 파일 (.BAT)로 변환하고 싶습니다 내가 쉘 스크립트 (.sh로)가

cat >flog.ctl <<_EOF 
LOAD DATA 
INFILE '$1.log' "str ';'" 
APPEND INTO TABLE flog 
fields terminated by '=' TRAILING NULLCOLS 
(
filename constant '$1' 
,num char 
,data char 
) 
_EOF 

sqlldr <username>/<password>@<instance> control=flog.ctl data=$1.log 

I 배치 파일에 너무 익숙하지 않지만 대답이 완전한 해결책이 아니라 몇 가지 힌트라면 나는 완전히 혼란스러워 할 것입니다. 이것은 다른 질문 here에 대한 답을 돕기위한 것입니다.

답변

3

Windows 배치 파일은 이러한 방식으로 데이터를 인라인하는 것을 지원하지 않습니다.

ECHO firstLine > flog.ctl 
ECHO additionalLine >> flog.ctl 

Windows 배치 파일은 % 기호 (예 : % 1 %)를 사용하여 ECHO 문의 변수를 나타냅니다.

그래서 당신은 결과중인 파일이 무언가 같이 될 것이다 : 이미 언급 한 바와 같이

@ECHO OFF 
ECHO LOAD DATA > flog.ctl 
ECHO INFILE '%1%.log' "str ';'" >> flog.ctl 
ECHO APPEND INTO TABLE flog >> flog.ctl 
ECHO fields terminated by '=' TRAILING NULLCOLS >> flog.ctl 
ECHO (>> flog.ctl 
ECHO filename constant '%1%' >> flog.ctl 
ECHO ,num char >> flog.ctl 
ECHO ,data char >> flog.ctl 
ECHO) >> flog.ctl 

sqlldr <username>/<password>@<instance> control=flog.ctl data=%1%.log 
+0

@ voithos 코드에서 사용되는 '% 1 %'와 (과) '% 1'의 차이점은 무엇입니까? 나는 둘 다 테스트 해봤 다. –

+2

@ JohnDoyle : 두 번째 %는 필요하지 않습니다. 제임스는 배치 파일에서 변수를 구분하기 위해 두 개의 기호를 사용하는 데 익숙 할 것이라고 생각합니다. [여기에 나와 있습니다] (http://www.tech-recipes.com/rx/630/using-variables-in-windows-batch-files) /). 그러나 명령 줄 인수를 참조하는 "올바른"방법은 내가 아는 한 [단일 % 사용] (http://www.computerhope.com/batch.htm#02)입니다. – voithos

+0

안녕하세요, @ 존 도일. 어느 쪽도 다른 쪽보다 정확하지 않습니다. 확장 할 때 특별한 대우를 받기 때문에 인수 변수 0-9를 단일 %로 항상 참조 할 수 있다는 것은 사실입니다. 명명 된 변수를 사용할 때'ECHO % Asometext % B'는 잘못된 출력을 가지며'ECHO % A % sometext % B %'는 그렇지 않기 때문에 항상 두 번째 % 습관을 사용합니다. 잠시 시간을 내면 내 뜻을 알 수 있습니다. – JamieSee

2

일부 복잡한 솔루션은 지금까지 인라인가 간다, 그러나 간단한 해결책은 echo을 사용하는 것입니다 .

@echo off 

echo LOAD DATA > flog.ctl 
echo INFILE '%1.log' "str ';'" >> flog.ctl 
echo APPEND INTO TABLE flog >> flog.ctl 
echo fields terminated by '=' TRAILING NULLCOLS >> flog.ctl 
echo (>> flog.ctl 
echo filename constant '%1' >> flog.ctl 
echo ,num char >> flog.ctl 
echo ,data char >> flog.ctl 
echo) >> flog.ctl 

sqlldr <username>/<password>@<instance> control=flog.ctl data=%1.log 
관련 문제