【问题标题】:Error in For /F statement in Windows Batch ScriptWindows 批处理脚本中的 For /F 语句错误
【发布时间】:2019-08-05 09:49:14
【问题描述】:

我正在尝试在批处理脚本中运行一个命令来解析一行的第四个单词。

此命令在命令行上运行良好,但在脚本中运行时会出错。错误状态:

此时不应跳过

db2cmd -i -c FOR /F "usebackq skip=3 tokens=4" %%G IN ("aliasname.txt") DO DB2 UNCATALOG SYSTEM DATABASE %%G

你能检查一下我在这里做错了什么吗?

【问题讨论】:

  • 但是这个命令在同一个批处理文件中运行良好: db2cmd -i -c FOR /F "usebackq" %%i IN (DB2 LIST SYSTEM ODBC DATA SOURCES) DO DB2 UNCATALOG SYSTEM ODBC DATA SOURCE %%i
  • windows 的前缀是否相同?我看到一个错误,说该命令无法识别:(
  • 我假设,当For 命令被传递给db2cmd 时,它需要被适当地引用。这看起来像通过时,它看到= 字符有问题。您可能需要在双引号中传递整个命令,并可能同时转义内部命令。
  • 我要逃避所有内部的吗?可以举个例子吗?
  • Aastha Dadal,请自行尝试有无内部转义,看看会发生什么。我假设最可能的转义方法是使用反斜杠,即 \",因此尝试每种方法的时间不会超过几秒钟。

标签: database windows batch-file scripting db2


【解决方案1】:

两种不同的选择,达到相同的效果,取决于你的风格。

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

    db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %%G IN ("aliasname.txt") DO DB2 UNCATALOG DATABASE %%G

-

此外,您可能需要修复 Db2 CLP 命令的语法,例如db2 uncatalog system odbc data sourcedb2 uncatalog database 取决于您希望取消目录的内容。

【讨论】:

  • 有没有办法可以检查系统以查看我的 db2cmd 是否在 Program Files 文件夹或 Program Files(x86) 文件夹中,并使用它来初始化 db2cmd?
  • 您可以在 cmd 中使用where db2cmd.exe。如果它在路径中,它将显示。显然,您可以使用 for 循环将路径设置为变量。
  • 您好,如何在没有用户干预的情况下逃脱 db2cmd.exe?
【解决方案2】:

如果从命令行运行命令,则必须使用 %G 变量引用,而不是像在批处理文件中使用的 %%G
双引号必须转义。
试试这个:

db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %G IN (\"aliasname.txt\") DO DB2 UNCATALOG SYSTEM DATABASE %G

顺便说一句,
没有UNCATALOG SYSTEM DATABASE DB2 命令。
UNCATALOG DATABASE

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2020-08-07
    • 2014-06-14
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多