Database Windows批处理脚本中的For/F语句出错

Database Windows批处理脚本中的For/F语句出错,database,windows,batch-file,scripting,db2,Database,Windows,Batch File,Scripting,Db2,我试图在批处理脚本中运行一个命令,以解析到一行的第四个字 此命令在命令行上运行正常,但在脚本中运行时会出现错误。错误状态为: 此时不应跳过 您能检查一下我的错误吗?如果从命令行运行命令,您必须使用%G变量引用,而不是批处理文件中使用的%G。 双引号必须转义。 试试这个: db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %G IN (\"aliasname.txt\") DO DB2 UNCATALOG SYSTEM DATABASE %G 顺便

我试图在批处理脚本中运行一个命令,以解析到一行的第四个字

此命令在命令行上运行正常,但在脚本中运行时会出现错误。错误状态为:

此时不应跳过


您能检查一下我的错误吗?

如果从命令行运行命令,您必须使用
%G
变量引用,而不是批处理文件中使用的
%G

双引号必须转义。
试试这个:

db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %G IN (\"aliasname.txt\") DO DB2 UNCATALOG SYSTEM DATABASE %G
顺便说一句,
没有
UNCATALOG系统数据库
DB2命令。

有两个不同的选项可以实现相同的结果,具体取决于您的风格

  • 省略任何DB2CLP操作的显式
    db2cmd-i-c
    前缀,并在db2cmd下自动运行整个脚本。这样做的好处是,它可以在CMD.EXE或DB2CMD.EXE窗口中运行,而不做任何更改。在这种情况下,您不需要特殊的引用或转义。批处理文件如下所示(调整db2cmd的路径以适应您的环境)
  • 如果您更喜欢Db2 CLP命令上的显式
    db2cmd-w-c
    前缀,则必须按照Mark Barinstein的回答中提到的双引号进行转义,尽管脚本中需要%%G:

    db2cmd-i-c FOR/F\“usebackq skip=3令牌=4\”%%G IN(“aliasname.txt”)是否执行DB2 UNCATALOG数据库%%G

-


此外,您可能需要修复Db2 CLP命令的语法,例如,
Db2 uncatalog system odbc data source
Db2 uncatalog database
,具体取决于您希望取消catalog的内容

但该命令在同一批处理文件中运行良好:db2cmd-i-c FOR/F“usebackq”%%i in(
DB2 LIST SYSTEM ODBC DATA SOURCES
)中的DB2 UNCATALOG SYSTEM ODBC DATA SOURCE%%iIs前缀是否与windows相同?我看到一个错误,表示无法识别该命令:(我将假设,当
For
命令传递到
db2cmd
时,它需要被适当地引用。这看起来像是传递时,它看到
=
字符有问题。您可能需要在双引号中传递整个命令,并且可能同时转义内部命令。我是否转义所有内部转义?你能给我举个例子吗?Aastha Dadal,请自己尝试一下有无内部转义,看看会发生什么。我认为最有可能的转义方法是使用反斜杠,即
\“
,因此您尝试每种方法的时间不应超过几秒钟。是否可以通过某种方式检查系统,查看我的db2cmd是否位于Program Files文件夹或Program Files(x86)中文件夹并使用该文件夹初始化db2cmd?您可以使用cmd中的
where db2cmd.exe
。如果它位于路径中,它将显示。显然,您可以使用for循环将路径设置为变量。如何在没有用户干扰的情况下转义db2cmd.exe?
db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %G IN (\"aliasname.txt\") DO DB2 UNCATALOG SYSTEM DATABASE %G
set db2cmd="C:\Program Files\IBM\SQLLIB\BIN\db2cmd.exe"
@if "%DB2CLP%"=="" %db2cmd% /w /c /i "%0" %* && @goto :EOF
FOR /F "usebackq skip=3 tokens=4" %%G IN ("aliasname.txt") DO DB2 UNCATALOG DATABASE %%G