将Unix Shell脚本转换为Windows批处理文件

时间:2012-02-02 23:59:55

标签: windows shell batch-file

我有一个在Unix中运行的shell脚本(.sh),但我想将其转换为Windows批处理文件(.bat):

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

我对批处理文件不太了解,但如果答案是一些提示而不是一个完整的解决方案,那么我相信我会糊里糊涂。这是为了帮助回答另一个问题here

2 个答案:

答案 0 :(得分:3)

Windows批处理文件不支持以这种方式内联数据。你必须

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

Windows批处理文件使用%符号表示ECHO语句中的变量,即%1%。

所以你得到的文件就像是:

@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 

答案 1 :(得分: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