同时调用另一个bat文件时,在bat文件中发出WMIC

时间:2017-11-20 23:08:55

标签: batch-file cognos wmic

我们目前正在将所有SQL Server 2012服务器升级到SQL Server 2016.此过程涉及建立新的服务器名称并重新定位别名。

现在,我的工作是更新所有autosys作业和bat文件,以确保所有应用程序仍然有效。这是我第一次这样做。到目前为止,以前的开发人员只是将服务器名称硬编码到bat文件中。其中许多应用程序也会触发Cognos报告。由于我们需要一个bat文件来处理所有环境,因此我们可以使用代码部署,以前的开发人员使用了以下内容:

REM ************************************************************
REM     Gateway URLs
REM ************************************************************
Set GatewayURL_DEV=Cognos Dev Server
Set GatewayURL_QA=Cognos QA Server
Set GatewayURL_PROD=Cognos_Prod_Server

if '%computername%' == 'VHDDEV' goto Dev
if '%computername%' == 'VHQDPPT' goto QA
if '%computername%' == 'VHPPROD' goto Prod

:Dev
set GateWayURL=%GateWayURL_DEV%
GOTO ExeTrigger

:QA
set GateWayURL=%GateWayURL_QA%
GOTO ExeTrigger

:Prod
set GateWayURL=%GateWayURL_PROD%
GOTO ExeTrigger

:ExeTrigger


E:
cd %TriggerPath%

CALL CognosTrg.bat %GatewayURL% 

exit/B 0

现在我不想在下次升级时再次更改这些内容,因此我决定使用WMIC来获取域名。所以我想出了以下内容:

REM ************************************************************
REM     Finding the server name
REM ************************************************************
REM 

for /f "tokens=2 delims==" %%A in ('wmic computersystem get domain /value') do set "Env=%%A"

REM ************************************************************
REM     Branching
REM ************************************************************
if %Env%==dev.company.net (GOTO DEV)
if %Env%==qa.company.net (GOTO QA)
if %Env%==prod.company.net (GOTO PROD)

:DEV
set GateWayURL=%GateWayURL_DEV%
GOTO ExeTrigger

:QA
set GateWayURL=%GateWayURL_QA%
GOTO ExeTrigger

:PROD
set GateWayURL=%GateWayURL_PROD%
GOTO ExeTrigger

:ExeTrigger

echo Host Server Name: %computername%
echo Cognos Environment: %Env%
echo Cognos Gateway: %GateWayURL%

这非常有效,并为我提供了所有服务器环境的正确值。当我更改ExeTrigger部分以调用Cognos Report时会出现问题。

:ExeTrigger

echo Host Server Name: %computername%
echo Cognos Environment: %Env%
echo Cognos Gateway: %GateWayURL%

E:
cd %TriggerPath%

CALL CognosTrg.bat %GatewayURL% 

exit/B 0

此操作失败,autosys日志显示分配似乎没有完成。

C:\Users\Act>if ==DEV (GOTO DEV) 

显示autosys错误日志:

(GOTO was unexpected at this time.

如果我注释掉CALL CognosTrg.bat%GatewayURL%这一行,它会在autosys日志中显示:

C:\Users\Act>if dev.company.net == dev.company.net (GOTO DEV ) 

C:\Users\Act>set GateWayURL=Cognos Dev Server

C:\Users\Act>GOTO ExeTrigger 

C:\Users\Act>echo Host Server Name: VHDDEV
Host Server Name: VHDDEV

C:\Users\Act>echo Cognos Environment: dev.company.net 
Cognos Environment: dev.company.net

C:\Users\Act>echo Cognos Gateway: Cognos Dev Server
Cognos Gateway: http://"Cognos Dev Server"

C:\Users\Act>E:
E:\>cd "E:\mpapp\Act\Trigger\lib\" 

E:\MPAPP\Act\Trigger\lib>CALL CognosTrg http://"Cognos Dev Server" fired successfully

所以我无法解决这个问题。触发器在旧服务器上运行,如果我只执行CognosTrg bat文件手册,则会正确执行。我还决定回去硬编码值,这也很有用。

由于子bat文件调用,WMIC执行失败了吗?我真的想避免硬编码服务器名称并回到"如果'%computername%'"实践。

1 个答案:

答案 0 :(得分:0)

我觉得这可能只是var chartData1 = []; var chartData2 = []; var chartData3 = []; generateChartData(); function generateChartData() { var firstDate = new Date(); firstDate.setDate(firstDate.getDate() - 500); firstDate.setHours(0, 0, 0, 0); for (var i = 0; i < 500; i++) { var newDate = new Date(firstDate); newDate.setDate(newDate.getDate() + i); var a1 = Math.round(Math.random() * (40 + i)) + 100 + i; var a2 = -1 * Math.round(Math.random() * (100 + i)) + 200 + i; var a3 = -1 * Math.round(Math.random() * (1000 + i)) + 2000 + i; chartData1.push({ date: newDate, value: a1 }); chartData2.push({ date: newDate, value: a2 }); chartData3.push({ date: newDate, value: a3 }); } } AmCharts.makeChart("chartdiv", { type: "stock", dataSets: [{ title: "first data set", fieldMappings: [{ fromField: "value", toField: "value" }], dataProvider: chartData1, categoryField: "date" }, { title: "second data set", fieldMappings: [{ fromField: "value", toField: "value2" }], dataProvider: chartData2, categoryField: "date" }, { title: "third data set", fieldMappings: [{ fromField: "value", toField: "value3" }], dataProvider: chartData3, categoryField: "date", compared: true } ], panels: [{ showCategoryAxis: false, title: "Data set #1", recalculateToPercents: "never", stockGraphs: [{ id: "g1", valueField: "value", comparable: true, bullet: "round" }], stockLegend: { } },{ showCategoryAxis: false, title: "Data set #2", recalculateToPercents: "never", stockGraphs: [{ id: "g2", valueField: "value2", comparable: true, bullet: "round" }], stockLegend: { } }, { showCategoryAxis: true, title: "Data set #3", recalculateToPercents: "never", stockGraphs: [{ id: "g3", valueField: "value3", compareField: "value3", comparable: true, bullet: "round", visibleInLegend: false }], stockLegend: { } } ], chartScrollbarSettings: { graph: "g1" }, chartCursorSettings: { valueBalloonsEnabled: true, fullWidth:true, cursorAlpha:0.1 }, periodSelector: { periods: [{ period: "MM", selected: true, count: 1, label: "1 month" }, { period: "YYYY", count: 1, label: "1 year" }, { period: "YTD", label: "YTD" }, { period: "MAX", label: "MAX" }] } }); 奇怪的unicode行结束序列的问题。如果我是正确的,你应该能够通过将你的for循环更改为:

来解决它
WMIC

您可以另外首先取消定义变量,然后检查它们是否在循环后定义:(如果未定义值,退出脚本)

For /F "Skip=1" %%A In ('WMIC ComputerSystem Get Domain') Do For %%B In ("%%A"
) Do Set "Env=%%~B"

以上答案假设您的域名不包含空格或有问题的字符。