命令清除批处理文件中的环境

Command clears environment in batch file

我是批处理文件的新手,所以如果我在这里使用的术语不正确,请原谅我。

我有一个批处理文件需要从我列出的所有 Glassfish 域中取消部署一个特定的应用程序。这是代码:

@echo off
setlocal EnableDelayedExpansion
set glassfishDomains=domainA4841,domainB4842

for /d %%a in (%glassfishDomains%) do (
    set fullDomain=%%a
    set port=!fullDomain:~-4!
    set domain=!fullDomain:~0,-4!
    echo Undeploying appName on domain !domain! !port!
    asadmin --host localhost --port !port! undeploy appName
    echo.
) 

问题是第一次执行asadmin命令后"losing the state"。

asadmin --host localhost --port !port! undeploy app

为清楚起见,asadmin.bat 是 Glassfish 的命令行工具。

如果我从文件中删除这个 line/command,循环会使用延迟扩展很好地执行字符串提取。这是这种情况下的结果输出:

Undeploying app on domain domainA 4841

Undeploying app on domain domainB 4842

"losing state" 我的意思是变量不再获得正确的值。在执行第一个 asadmin 命令后,我开始得到这个结果:

Undeploying appName on domain domainA 4841
Command undeploy executed successfully.

D:\>(
 set fullDomain=domainB4842
 set port=!fullDomain:~-4!
 set domain=!fullDomain:~0,-4!
 echo Undeploying appName on domain !domain! !port!
 asadmin --host localhost --port !port! undeploy appName
 echo.
)
domainB4842
Undeploying appName on domain !domain! !port!
CLI136: Port !port! should be a numeric value.
Command --host failed.

那么问题来了,在这些命令执行后,有没有办法避免"losing the script state"呢?或者这是该工具(asadmin)的某种限制?

尝试

cmd /C "asadmin --host localhost --port !port! undeploy appName"