2017-12-16 4 views
0

Hallo Ich versuche Batch-Datei verwenden, um Nachricht aus der Warteschlange zu löschen. Ich habe eine Liste von Warteschlangen in einer Datei. Ich bin in der Lage, eine Datei im Stapelprogramm zu lesen und die Warteschlange zu löschen. Wenn die Datei mehr als eine Warteschlange enthält, die gelöscht werden soll, kann ich sie in einem Array speichern. Die Übergabe des Array-Elements an den MQ-Befehl funktioniert jedoch nicht. Bitte beraten. Neu bei Batch-Scripting, so dass die MethodeSchleifen in Batch-Datei

Code:

for /f %%G in (file.txt) do (
    set /a count+=1 
    set fileName[!count!]=%%~G 
    call set n=!count! 
) 
rem echo !fileName[%count%]! 

for /L %%i in (1,1,%n%) do (
echo !fileName[%%i]! 
echo display qlocal(!fileName[%%i]!) | runmqsc %1 
) 

I setlocal enabledelayedexpansion EnableExtensions im Code haben, und in dem oben Stück richtig echo-Anweisung funktioniert, es wird der gesamte Inhalt des Feldes anzeigt. aber es wird nicht übergeben, um qlocal anzuzeigen.

Neu zu stackoverflow, wenn das Buchungsformat nicht ordnungsgemäß entschuldigt.

+0

Sie müssen nicht "Call" verwenden, nur "Set" n =! Count! "' Wird tun. Das heißt, Sie müssen keine Zeit damit verschwenden, es zu setzen, Sie können '(1,1,% count%)' direkt verwenden. Als Randnotiz seien Sie vorsichtig, besonders wenn Sie 'Call's und' For's_ verwenden, dass Sie Ihre Eingabeargumente nicht verlieren (in diesem Fall '% 1'). Es ist oft sicherer, Variablen früh im Code Argumente zuzuweisen, wenn diese Argumente nicht früh im Skript verwendet werden. – Compo

Antwort

1

Verwenden

echo display qlocal(!fileName[%%i]!^) | runmqsc %1 

Das Caret ^ "entweicht" die ) so dass cmd es als Standardzeichen sieht und sich paaren es nicht mit dem in (for /L ... do ( die den do Block schließt.

Verwandte Themen