CMD kommandoer CALL og/eller GOTO... eller?

Tags:    cmd bat call goto kommandoer

Hej udviklere... :-)
Jeg er ganske ny i forhold til programmering og bruger det derfor også kun privat.
Jeg har lavet nogle små programmer i cmd-prompten (kommandoliniefortolkeren) for at automatisere nogle trælse opgaver.

Først et kort overblik:
Jeg har lavet et .CMD program hvorfra jeg kalder et andet .CMD program med kommandoen CALL.
Dette program jeg netop har "kaldt" starter fire nye .cmd programmer med kommandoen START.
Disse fire programmer tager forskellig tid at afvikle og ender med en PAUSE.

Herefter hvad jeg ønsker:
Hvordan får jeg de fire programmer "afslutte" samtidigt.
Kan man få disse fire programmer til at holde øje med hvorrnår de hver især er færdige...
Altså - Den der er sidst færdig skal sørge for at lukke alle fire programmer og herefter vende tilbage til programmet som har startet dem.

Overvejelser:
Jeg går ud fra at jeg i stedet for at starte de fire programmer med kommandoen START skal kalde dem med kommandoen CALL.
I øjeblikket ender de fire programmer med kommandoen PAUSE, men hvis jeg fjerner denne kommando, så ender programmer jo blot succesivt og IKKE samtidigt.

Hvem kan hjælpe??

Maskinmesteren



9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Når et program starter, kan du f.eks. sætte en environment variabel:

set program1 = start

når det slutter laver du i programmet en set program1 = slut

De andre programmer skal så loope, indtil program1 variablen er lig med slut og så kan de starte med deres job.






Måske er det noget i stil med dette du er ude efter:
Fold kodeboks ind/udKode 




Hej Brian

Tak for din meget hurtige respons.

Jeg benytter SET kommandoen i programmerne allerede, men troede egentlig kun det var til tekststrenge?

Fx
SET javacpl="C:\Program Files (x86)\Java\jre6\bin\javacpl.exe"

og senere i programmet:
echo Kør Java opdatering
%javacpl%

Hvordan "looper" jeg som du nævner?




Pipeline dine programmer.
Program1 | Program2 | Program3

Du kan læse lidt om det her:
http://technet.microsoft.com/en-us/library/bb490982.aspx
http://technet.microsoft.com/en-us/library/ee176927aspx#EIAA

Så køre du et program, og starte det næste med outputtet fra det første :)



Ja, jeg mangler lige "" rundt om start og slut :-)

I program to, så noget med:

:start
if not '%program1%'=='slut' goto start

.... her starter koden i dit program 2.


Så laver den en goto, indtil program1 er lig med slut. Det er slet slet ikke pæn kode og hvis program1 aldrig bliver sat til slut, så looper det.

Ovenstående er ikke testet, men lige hvad jeg kan huske :-)




Ikke forstået - beklager...

PROGRAM 1:

call "program 2"


PROGRAM 2:

start "program 3"
start "program 4"
start "program 5"
start "program 6"


PROGRAM 3+4+5+6:

blablabla

pause


HVAD GØR JEG ???





Jeg er bange for at cmd-filer ikke rigtigt egner sig til dette. Du kan godt lave nogle "udvidelser" som gør det muligt, men helt godt bliver det nok aldrig. Et af problemerne er at set ikke virker på tværs af cmd-prompte, det du set'er i den ene prompt kan ikke læses i de andre. Du kan lave en fælles fil som programmerne registrerer sig i, men helt godt bliver det aldrig. Desværre.

Hvis du vil have det til at virke fornuftigt, bliver du nødt til at anvende et rigtigt programmeringssprog.



Ja det kunne jeg forestille mig.
Jeg er dog rigtig godt igang med nogle små programmer, hvor jeg kun lige mangler "det sidste"...

Jeg kan løse problemet på en anden måde, men der skal jeg dog også lige have en hånd...

Hvis jeg har en tekstfil (.txt) hvordan kan jeg så bruge det der står i denne som en "label" og bruge det i et af programmerne...

Altså:

tekstfil.txt
I denne tekstfil står kun ét enkelt ord fx "blablabla".

Program X

I dette program har jeg forskellige koder fx
kode xxxxxx
kode yyyyyy
kode zzzzzz

GOTO [det der står i tekstfil.txt]

For at hente det der står i tekstfilen skal man vist bruge "<"-tegnet, men uanset hvordan jeg gør det, så lykkes det ikke AAARRRGGGHHH

Alternativt kunne jeg i tekstfilen skrive GOTO blabla
men hvordan bruger jeg så det direkte som en kommando i PROGRAM X ?

I min bog burde det være en rimelig opgave til nogen som bare har en smule kendskab til .CMD eller .BAT filer (i modsætning til mig he he)

Hvem kan klare den lille opgave?

Peder




Har lige forsøgt mig med koden.
Umiddelbart virker det ikke helt.

Når jeg kører scriptet, så åbner den kun i et brøkdel af et sekund.
Jeg når ikke engang at se hvad der står i den...

Jeg har forsøgt at sætte pauser ind, men det hjælper ikke.
Betyder Goto :EOF ikke at programmet skal gå til enden og slutte?

I tekstfil.txt har jeg gemt tekststrengen "test2" (uden anførselstegn)

Her er koden

@echo off
cls

::goto test2
for /F %%I in ('type C:\Users\N5010\Desktop\tekstfil.txt') do set Label=%%I
goto :%Label%
:: jeg har også forsøgt "goto %Label%" (ingen kolon og uden anførselstegn)

:test1
echo test1
pause
goto :eof

:test2
echo test2
pause
goto :eof

:olebole
echo You got mail
pause
goto :eof


Hvorfor virker det ikke - koden virker ellers sandsynlig...










Prøvede lige lidt til - DET VIRKER YEEHHHHAAA
Tak Bertel.

Der er vist noget med nogle point...
Ikke helt med på hvordan det virker men forsøger lige at fordele nogle...

Ellers er i velkomne til at vende tilbage :-)




Indlæg senest redigeret d. 30.06.2012 12:47 af Bruger #16988
t