windows
  • shell
  • batch-file
  • 2012-02-02 136 views 2 likes 
    2

    我有一个shell脚本(.SH)在Unix的作品,但我想它转换成Windows批处理文件(.bat):转换Unix Shell脚本到Windows批处理文件

    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

    回答

    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'是否有区别?我已经测试过这两个工作。 – 2012-02-03 02:43:50

    +2

    @JohnDoyle:第二个%没有必要。我认为James可能习惯使用两个符号来分隔批处理文件中的变量,[如此处所示](http://www.tech-recipes.com/rx/630/using-variables-in-windows-batch-files /)。但据我所知,引用命令行参数的“正确”方法是[使用单个%](http://www.computerhope.com/batch.htm#02)。 – voithos 2012-02-03 06:34:53

    +0

    嗨,@JohnDoyle。这两种方法都不是比另一种更正确。确实,你总是可以引用参数变量0-9,因为它们在扩展时会得到特殊的处理。我总是习惯使用第二个习惯,因为当使用命名变量时,'ECHO%Asometext%B'将有错误的输出,'ECHO%A%sometext%B%'不会。试一试吧,你会明白我的意思。 – JamieSee 2012-02-03 16:05:00

    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 
    
    相关问题