2012-02-02 10 views
2

WindowsのバッチファイルにUnixシェルスクリプトを変換しますUNIXで動作しますが、私は、Windowsのバッチファイル(.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:2番目の%は必要ありません。私はJamesがバッチファイルで変数を区切るために2つの記号を使用することに慣れているかもしれないと思う[ここに示すように](http://www.tech-recipes.com/rx/630/using-variables-in-windows-batch-files /)。しかし、私が知る限り、コマンドラインの引数を参照する "正しい"方法は、[単一の%を使う](http://www.computerhope.com/batch.htm#02)です。 – voithos

+0

こんにちは、@ジョンドイル。いずれの方法も他の方法よりも正しい方法ではありません。展開時に特別な扱いを受けるので、引数変数0-9を1つの%で参照することは常に可能です。なぜなら、名前付き変数を使うとき、 '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 
関連する問題