我有一个在Unix下工作的shell脚本(.sh),但是我想将它转换成Windowsbatch file(.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
我不太了解batch file,但如果答案是一些提示,而不是一个完整的解决scheme,那么我相信我会混淆。 这是为了帮助解答另一个问题。
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
就内联而言,有一些复杂的解决方案,但正如已经提到的,一个简单的解决方案是使用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