无法从for循环内部回显

时间:2017-05-04 08:59:53

标签: sql batch-file cmd

我有以下代码尝试生成一个sql文件,其中所有插入的变量br中的所有不同值都以逗号分隔。 我能够访问br in for循环中的所有值,但是当我尝试回显整个语句时,它失败了。

任何帮助?

@echo off

set /p uid="USER ID = "
set /p aname="APPL NAME = "
set /p rname="ROLE NAME = "
set /p cid="COMPANY ID = "
set /p br="BR = "
echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test1.sql
for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test2.sql

)

1 个答案:

答案 0 :(得分:2)

你必须逃避括号:

@echo off

set /p uid="USER ID = "
set /p aname="APPL NAME = "
set /p rname="ROLE NAME = "
set /p cid="COMPANY ID = "
set /p br="BR = "
echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR) VALUES ('%uid%','%aname%','%rname%','%cid%',%%~a); > test1.sql
for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH ^(USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR^) VALUES ^('%uid%','%aname%','%rname%','%cid%',%%~a^); > test2.sql

)

问题在于:

for %%a in ("%br:,=" "%") do (

echo INSERT INTO USER_AUTH_BRANCH (USER_ID,APPL_NAME,ROLE_NAME,COMPANY_ID,BR)

)之后的...BR被解释为DO ()块的结束括号。这就是为什么你必须逃避它以明确它实际上是作为字符串的一部分。