批处理文件 - 换行符问题
Batch file - newline character issue
我在批处理脚本输出方面遇到了一些奇怪的问题。我的要求是通过批处理文件 运行 一个 sql 脚本(使用 sqlplus),这个 SQL 脚本的输出将是另一个批处理文件(例如:For_Loop.bat).批处理文件将包含大约 20 个 FOR 循环,如下所示。请注意,在目录路径的末尾有一个换行符,如果没有这个,FOR 循环将不会执行,并且在 'found'.
之后的第 2 行的 ')' 之后也有一个换行符
现在我面临的问题是 - 这个 "For_Loop.bat" 文件 运行 有时很好,有时它会抛出下面的错误。这对我来说看起来像是一个换行符问题。此换行符由 SQL 查询引入,如下所示。那么你能发现这里出了什么问题吗?我不确定为什么这 运行 一直不顺利。顺便说一句,这个 FOR 循环的 objective 是只将最新的文件从一个文件夹复制到另一个文件夹。
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的内容删了,保存。将内容粘贴回去并再次保存。当 运行 现在这个批处理文件执行成功。除了 cut/paste.
之外,没有对 For_Loop.bat 文件内容进行任何修改
这告诉我,当文件由 SQL 输出写入时设置了一些属性,这导致了问题。
如果您知道任何此类事情,请告诉我。
在每个 chr(13)
后面直接放一个 chr(10)
。 Windows 标准是 CRLF 而不是单独的 CR。将这样的文件加载到编辑器中并保存它可能会添加丢失的 LFs
我在批处理脚本输出方面遇到了一些奇怪的问题。我的要求是通过批处理文件 运行 一个 sql 脚本(使用 sqlplus),这个 SQL 脚本的输出将是另一个批处理文件(例如:For_Loop.bat).批处理文件将包含大约 20 个 FOR 循环,如下所示。请注意,在目录路径的末尾有一个换行符,如果没有这个,FOR 循环将不会执行,并且在 'found'.
之后的第 2 行的 ')' 之后也有一个换行符现在我面临的问题是 - 这个 "For_Loop.bat" 文件 运行 有时很好,有时它会抛出下面的错误。这对我来说看起来像是一个换行符问题。此换行符由 SQL 查询引入,如下所示。那么你能发现这里出了什么问题吗?我不确定为什么这 运行 一直不顺利。顺便说一句,这个 FOR 循环的 objective 是只将最新的文件从一个文件夹复制到另一个文件夹。
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的内容删了,保存。将内容粘贴回去并再次保存。当 运行 现在这个批处理文件执行成功。除了 cut/paste. 之外,没有对 For_Loop.bat 文件内容进行任何修改
这告诉我,当文件由 SQL 输出写入时设置了一些属性,这导致了问题。
如果您知道任何此类事情,请告诉我。
在每个 chr(13)
后面直接放一个 chr(10)
。 Windows 标准是 CRLF 而不是单独的 CR。将这样的文件加载到编辑器中并保存它可能会添加丢失的 LFs