gpt4 book ai didi

windows - Windows批处理中的!call和call有什么区别

转载 作者:可可西里 更新时间:2023-11-01 11:42:39 25 4
gpt4 key购买 nike

有2个文件:file1.bat、file2.cmd

file1.bat通过命令调用file2.cmd:

db2cmd -i -c -w db2 !call file2 parm1 parm2

此命令在同一窗口中打开一个 DB2 命令窗口并调用 file2.cmd
但是,我无法理解的是'!'的功能。在'调用'前面。

file2.cmd 具有以下特点:

1. DB connection: db2 connect to dbname user username using psw
2. File open: for /F "delims=;" %%i in (input.txt) do (do something)

如果传递了不正确的参数,
--------在file1命令中使用'call',错误显示:

SQL1024N  A database connection does not exist.  SQLSTATE=08003 

--------在file1命令中使用'!call',错误显示:

SQL1001N  "xxx" is not a valid database name.  SQLSTATE=2E000  
The system cannot find the file \input.txt.
DB20000I The TERMINATE command completed successfully

因此,看起来“call”会调用另一个文件,并在其中一个命令失败时中断并显示高级错误消息;
而 '!call' 调用另一个文件并继续运行里面的所有命令,即使有错误,然后显示所有失败的所有错误消息。

有人可以告诉我 'call' 和 '!call' 之间的区别吗?

最佳答案

好吧,简单来说,batch/cmdline 中没有函数!call。因此 db2cmd.exe 本身就是一个命令行处理器,需要您使用带有前缀 !

的系统命令

因此,尽管您有一个运行带有参数的命令的批处理文件,但实际情况是这样的。您从这个 cmd 启动 db2cmd,然后它要求您调用另一个批处理文件,但是看到我们不再在 cmd 的外壳中,而是在 db2cmd 内部然后需要通过 !call

告诉 db2cmd 这是您正在执行的系统命令

您可以通过自己的 db2cmd 对其进行测试,您将看到 db2=> 提示符,然后尝试使用 call vs !call 从那里。

至于你的错误信息:

SQL1001N  "xxx" is not a valid database name.  SQLSTATE=2E000  
The system cannot find the file \input.txt.
DB20000I The TERMINATE command completed successfully

尝试添加路径到 input.txt 文件

for /F "delims=;" %%i in (C:\somepath\input.txt) do (
something
)

或将 input.txt 放在您的工作目录中。

关于windows - Windows批处理中的!call和call有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com