【发布时间】: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.
更新
我注意到的另一个奇怪的行为是 -
- SQL 输出写入 For_Loop.bat 文件。当我运行这个 For_Loop.bat 文件失败并出现上述错误。
- 如果我剪切了 For_Loop.bat 的内容,请保存它。将内容粘贴回去并再次保存。现在运行时,此批处理文件将成功执行。除了剪切/粘贴之外,没有对 For_Loop.bat 文件内容进行任何修改。
这告诉我,当文件由 SQL 输出写入时设置了一些属性,这些属性会导致问题。
如果您知道任何此类事情,请告诉我。
【问题讨论】:
标签: batch-file newline sqlplus