跟踪批量变量

时间:2014-04-23 07:20:12

标签: batch-file sqlcmd

我有这批在服务器计算机上执行的批处理。有一个运行批处理的预定作业。批处理检测到特定文件,然后执行如下所示的sqlcmd:

if not exist %TRIG_FILE% goto No_Triggers

sqlcmd 
-S %WSL_SERVER% 
-d %WSL_DATABASE% 
-E 
-Q "DECLARE @RES integer;DECLARE @RET varchar(1);DECLARE @MSG varchar(65);EXEC Ws_Job_Release 1,'Release Job Unlock Batch','All',0,0,'Unlock_Batch',@RET OUTPUT,@MSG OUTPUT,@RES OUTPUT"

我的问题是 - 批处理如何知道%WSL_SERVER%变量是什么,因为当我查看脚本时,没有任何地方设置%WSL_SERVER%变量。 这是我第一次阅读.bat脚本,我知道相当多的编程,但我看不出该变量是如何传递到这个脚本的,因此它知道哪个服务器。没有其他批次调用它,它来自调度程序的批处理。

感谢

gemmo

1 个答案:

答案 0 :(得分:2)

每次使用Windows会话时,WSL_SERVERWSL_DATABASE很可能是全局环境变量。这意味着它们存在(定义)在每个CMD会话中,因此存在于每个批处理脚本中。您可以打开一个新的命令提示符窗口并发出此命令

SET WSL

将(尝试)显示名称以WSL开头的所有环境变量,无论是全局变量还是本地变量。我猜测输出将至少显示脚本中使用的两个WSL变量。

操作系统预定义并维护了许多全局变量。然而,你的可能是用户定义的(根据我的系统没有它的事实,我的猜测)。用户定义的变量可以由第三方软件或您自己的(可能是别人的)批处理脚本创建,也可以通过SETX命令的独立调用来创建:

SETX VarName "Value"

您可以使用该命令全局更改任何变量的值。请注意,如果不希望进行全局更改,您也可以像往常一样使用SET命令暂时更改该值,在脚本的持续时间内:

SET "VarName=Value"
相关问题