批量新手在这里。我有一个未正确捕获变量的问题。我有ABC_RegionCode的SCCM对象变量,ABC_DBNAME,ABC_Schema和srvpocWeb _ %%%(其中%%%等于100个区域代码中的一个)。
我的问题: 如果Regioncode变量为其运行的每台计算机发生更改,如何让此批处理为srvPocWeb_(ABC_RegionCode)提取变量值?我需要脚本知道srvPocWeb_%1 ="%4"意味着我希望变量的值存储在%4中。
如果我只是硬编码完整的网站代码名称而不是srvPocWeb_%1 ="%4"这个脚本可以正常工作。它几乎就像批处理不能告诉我希望在阅读之前将其翻译成字符串。
example.bat%ABC_RegionCode %% ABC_DBNAME %% ABC_SCHEMA%!srvPocWeb_%1! >> C:\ test.txt的
@echo off
Setlocal EnableDelayedExpansion
Rem Pull in variables from SCCM OBject -
@echo set ABC_RegionCode="%1"
@echo set ABC_DBNAME="%2"
@echo set ABC_SCHEMA="%3"
@echo set srvPocWeb_%1="%4"
@echo "C:\Program Files\Application_%1\Database\Tools\Client\Client.exe" sourcepath="C:\Source" databasetype="oracle" databaseconnection="data Source=%2;User Id=%3;Password=!srvPocWeb_%1!" reportsfolderpath="C:\reports"
@echo "C:\Program Files\Application_%1\Database\Tools\Client\Client.exe" sourcepath="C:\Source" reImportBuild=true outputonly=false databasetype="oracle" databaseconnection="data Source=%2;User Id=%3;Password=!srvPocWeb_%1!" reportsfolderpath="C:\reports"
@echo All Done
答案 0 :(得分:1)
你这里有困惑。正如我在你的另一个问题中所说,你需要指定哪些变量存储在你想要的每个值中。如果区域代码存储在ABC_RegionCode
变量中,则其值通过%ABC_RegionCode%
获取。在srvpocWeb_%%%
变量(其中%%%等于100个区域代码中的一个,并且特定区域代码由ABC_RegionCode变量给出)中,变量的名称为{{ 1}}及其值为srvpocWeb_%ABC_RegionCode%
。这样,您可以这样修改命令行:
!srvpocWeb_%ABC_RegionCode%!
但是,前一行仅在延迟扩展在执行上一行时处于活动状态时有效,并且默认情况下在命令行中启用延迟扩展 。
您必须意识到example.bat %ABC_RegionCode% %ABC_DBNAME% %ABC_SCHEMA% !srvPocWeb_%ABC_RegionCode%! >> C:\test.txt
在批处理文件中只有第一个参数的值,不是在用于调用批处理文件的同一行中
解决问题的另一种方法是:
%1
在批处理文件中,example.bat %ABC_RegionCode% %ABC_DBNAME% %ABC_SCHEMA% >> C:\test.txt
的值为<{em> %1
,因此您可以通过以下方式获取ABC_RegionCode
变量的严格值:
srvPocWeb_%%%
PS - 应该在原始问题的同一个主题中遵循此问题。删除问题并在新问题中发布有关同一主题的新细节是一个非常糟糕的主意。