批处理文件 - 换行符问题

时间:2017-03-13 09:40:03

标签: batch-file newline sqlplus

我在批处理脚本输出方面遇到了一些奇怪的问题。我的要求是通过批处理文件(使用sqlplus)运行sql脚本,此SQL脚本的输出将是另一个批处理文件(例如:For_Loop.bat)。批处理文件将包含大约20个FOR循环,如下所示。请注意,在目录路径的末尾有一个换行符,如果没有这个FOR循环不会执行,并且在')之后会有一个换行符。在找到'之后的第二行。

现在我遇到的问题是 - 这个" For_Loop.bat"文件运行正常,有时它会抛出下面的错误。这对我来说看起来像一个换行符问题。这个换行符由SQL查询引入,如下所示。所以你能否发现这里出了什么问题?我不确定为什么这种情况一直没有顺利进行。顺便说一句,这个FOR循环的目的是将最新文件从一个文件夹复制到另一个文件夹。

For_Loop.bat

FOR /F "delims=" %%i IN ('dir "tbl_rec_value1" /b /t:c /o-d') DO ( COPY /Y "tbl_col_value1\%%i" "tbl_rec_value1"
goto found )
:found
FOR /F "delims=" %%i IN ('dir "tbl_rec_value2" /b /t:c /o-d') DO ( COPY /Y "tbl_col_value2\%%i" "tbl_rec_value2"
goto found )
:found

SQL 注意:chr(13)是引入换行符。

select 'FOR /F "delims=" %%i IN ('||''''|| 'dir "'|| tbl_col1 || tbl_col2 || '" /b /t:c /o-d'||''''||') DO ( COPY /Y "'|| tbl_col1 ||'%%i" "' || tbl_col1 || 'Dir_Level2"' ||  chr(13) || 'goto found )' || chr(13) || ':found' cmd
from tbl;

错误讯息 -

:found was unexpected at this time.

更新

我注意到的另一个奇怪的行为是 -

  1. SQL输出写入For_Loop.bat文件。当我跑这个 For_Loop.bat文件因上述错误而失败。
  2. 如果我剪切了For_Loop.bat的内容,请保存。粘贴内容并再次保存。现在运行时,此批处理文件成功执行。除了剪切/粘贴之外,对For_Loop.bat文件内容没有任何修改。
  3. 这告诉我,当SQL输出写入文件导致问题时,会设置一些属性。

    如果您发现任何此类事情,请告知我们。

1 个答案:

答案 0 :(得分:1)

在每个 chr(10)之后直接添加chr(13) 。 Windows标准单独是 CR LF 而不是 CR 。将这样的文件加载到编辑器中并保存它可能会添加缺少的 LF s