【问题标题】:Batch file - newline character issue批处理文件 - 换行符问题
【发布时间】:2023-03-10 06:57:01
【问题描述】:

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

现在我面临的问题是 - 这个“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 文件内容进行任何修改。

这告诉我,当文件由 SQL 输出写入时设置了一些属性,这些属性会导致问题。

如果您知道任何此类事情,请告诉我。

【问题讨论】:

    标签: batch-file newline sqlplus


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多