2016-08-20 1 views
0

Ich bin neu in Batch-Dateien, also bitte vergib mir, wenn ich hier nicht die richtige Terminologie verwende.Befehl löscht die Umgebung in der Batch-Datei

Ich habe eine Batch-Datei, die eine bestimmte Anwendung von allen meinen gelisteten Glassfish-Domains deimplementieren muss. Hier ist der Code:

@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. 
) 

Das Problem ist, dass es zu „verlieren den Zustand“ nach den asadmin Befehle zum ersten Mal ausgeführt wird.

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

Aus Gründen der Übersichtlichkeit ist asadmin.bat das Befehlszeilentool von Glassfish.

Wenn ich diese Zeile/diesen Befehl aus der Datei entferne, führt die Schleife die Zeichenfolgenextraktion mit verzögerter Expansion aus. Dies ist die resultierende Ausgabe in diesem Fall:

Undeploying app on domain domainA 4841 

Undeploying app on domain domainB 4842 

Mit "Zustand verlieren" meine ich, dass Variablen nicht mehr die richtigen Werte erhalten. Nach der ersten asadmin Befehlsausführung, beginne ich dieses Ergebnis zu erhalten:

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. 

Die Frage ist also, ob es eine Möglichkeit zu vermeiden ist, ausgeführt werden, nachdem diese Befehle „den Skript Zustand zu verlieren“? Oder ist das eine Art Einschränkung von diesem Tool (asadmin)?

+0

@Mofi Versuchen ich meine Frage nur bearbeitet, die Dinge, die Sie fragen zu klären. Verwenden von Anruf asadmin funktioniert. Vielen Dank. – carlossierra

+0

@Mofi beide Dinge funktionierten: 'call asadmin ...' und der Vorschlag von smead gemacht. Ich habe Smeads Antwort einfach als akzeptiert markiert. Ich werde eine weitere Frage stellen, um zu fragen, ob es einen Unterschied zwischen diesen beiden Ansätzen gibt, da mir nicht klar ist, warum sie beide arbeiten und ob es wichtige Unterschiede gibt, die zu berücksichtigen sind. Vielen Dank. – carlossierra

Antwort

1

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