/ Forside / Teknologi / Operativsystemer / MS Windows / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
MS Windows
#NavnPoint
Klaudi 76474
o.v.n. 67550
refi 58409
tedd 45557
Manse9933 45149
molokyle 40687
miritdk 38357
briani 27239
BjarneD 26414
10  pallebhan.. 24310
Lidt .BAT spørgsmål (igen :-)
Fra : Pistolprinsen


Dato : 03-09-06 11:14

Hejsa,


1) Kan man lave et linie skift i en ECHO kommando?

2) Jeg har en standard besked, på 9 linier, der skal komme frem flere gange
undervejs i mit script, og det er lidt træls at skulle sidde og lave disse
linier gang på gang!
Og, disse 9 linier fylder osse godt op i mit script med alle de
gentagelser!
Kan man ikke lave disse linier i en form for varibel, og så blot ECHO'e
denne variabel?

3) Eller findes der en form for GOSUB... RETURN... i DOS?

4) Kan man kalde et andet .BAT script fra et andet .BAT script?
Hvordan?

5) Mit .BAT script skal rulle en række mapper, hver gang det køres, ved at
RENAME dem.
Altså således at mappe ZY bliver til ZZ
Mappe ZX bliver til ZY
Mappe ZW bliver til ZX
Helt ned til, hvor mappe AA bliver til AB.

Når alle mapperne så er rullet, så ved jeg at de nyeste data ligger i
mappe AA, og data for de foregående timer ligger i mapperne fra AB og
opefter, således, at ældeste sæt data ligger i mappe ZZ.

Men, det bliver jo til en farlig masse linier i mit .BAT script!!!
Ikke færre end 675 linier!

Kan dette laves på en smart måde i en form for løkke?


TIA,

Pistolprinsen



 
 
Jan Vestergaard (03-09-2006)
Kommentar
Fra : Jan Vestergaard


Dato : 03-09-06 11:56

Pistolprinsen wrote:
> 4) Kan man kalde et andet .BAT script fra et andet .BAT script?
> Hvordan?

Det kan du gøre med CALL

F.x. hvis du et BAT-fil skriver

CALL SUB.BAT

- så vi du får udført SUB.BAT og derefter køre videre, hvor du
var nået til - så den kan ihvertfald bruges der, hvor du skal
udskrive de samme ting mange gange.

De andre spørgsmål kan jeg ikke lige svare på - men det kan andre
nok

Jan

--
Med venlig hilsen Jan Vestergaard
Web: www.jve.dk - email kan sendes via hjemmesiden
- men indlæg på Usenet bør normalt besvares i gruppen



Ukendt (03-09-2006)
Kommentar
Fra : Ukendt


Dato : 03-09-06 12:16

Pistolprinsen wrote:

Snakker du om "ægte DOS" eller et kommando vindue i XP ?

>
> 1) Kan man lave et linie skift i en ECHO kommando?

Punktum efter ECHO kommandoen (uden mellemrum) giver en tom
linie på skærmen:
ECHO.

> 2) Jeg har en standard besked, på 9 linier, der skal komme frem flere
> gange undervejs i mit script, og det er lidt træls at skulle sidde og
> lave disse linier gang på gang!
> Og, disse 9 linier fylder osse godt op i mit script med alle de
> gentagelser!
> Kan man ikke lave disse linier i en form for varibel, og så blot
> ECHO'e denne variabel?

Kan du ikke lægge standard beskeden ned i en .TXT fil og
så bare TYPE den ud hver gang du skal bruge den?

> 3) Eller findes der en form for GOSUB... RETURN... i DOS?

Mig bekendt, nej.
Men du kan måske bruge metoden med at kalde et andet batch
script. Se 4)

> 4) Kan man kalde et andet .BAT script fra et andet .BAT script?
> Hvordan?

CALL batchfil

> 5) Mit .BAT script skal rulle en række mapper, hver gang det køres,
> ved at RENAME dem.
> Altså således at mappe ZY bliver til ZZ
> Mappe ZX bliver til ZY
> Mappe ZW bliver til ZX
> Helt ned til, hvor mappe AA bliver til AB.
>
> Når alle mapperne så er rullet, så ved jeg at de nyeste data ligger
> i mappe AA, og data for de foregående timer ligger i mapperne fra AB
> og opefter, således, at ældeste sæt data ligger i mappe ZZ.
>
> Men, det bliver jo til en farlig masse linier i mit .BAT script!!!
> Ikke færre end 675 linier!
>
> Kan dette laves på en smart måde i en form for løkke?

Der findes nogle begrænsede muligheder for at lave løkker i et
alm. batch script, men det er bestemt ikke for sarte sjæle...

Prøv at åbne et kommando vindue og skriv:
HELP FOR
så kan du selv se hvad jeg mener.


-E.G.



Paw P Larsen (03-09-2006)
Kommentar
Fra : Paw P Larsen


Dato : 03-09-06 12:25

Pistolprinsen wrote:
> 2) Jeg har en standard besked, på 9 linier, der skal komme frem flere gange
> undervejs i mit script, og det er lidt træls at skulle sidde og lave disse
> linier gang på gang!
> Og, disse 9 linier fylder osse godt op i mit script med alle de
> gentagelser!
> Kan man ikke lave disse linier i en form for varibel, og så blot ECHO'e
> denne variabel?
>
> 3) Eller findes der en form for GOSUB... RETURN... i DOS?

Jeg ville leve med at lave lidt mere copy-paste. Der er ikke
nogen gosub/return. Workaround kan være at sætte en værdi inden
GOTO og så have IF sætninger til at returnere til et givent punkt.

Alternativt teksten i en tekstfil og TYPE tekstfil

> 5) Mit .BAT script skal rulle en række mapper, hver gang det køres, ved at
> RENAME dem.
> Altså således at mappe ZY bliver til ZZ
> Mappe ZX bliver til ZY
> Mappe ZW bliver til ZX
> Helt ned til, hvor mappe AA bliver til AB.
>
> Når alle mapperne så er rullet, så ved jeg at de nyeste data ligger i
> mappe AA, og data for de foregående timer ligger i mapperne fra AB og
> opefter, således, at ældeste sæt data ligger i mappe ZZ.
>
> Men, det bliver jo til en farlig masse linier i mit .BAT script!!!
> Ikke færre end 675 linier!
>
> Kan dette laves på en smart måde i en form for løkke?

FOR, eller måske nested FOR

Kig evt. på http://www.robvanderwoude.com/ for eksempler.

Pistolprinsen (03-09-2006)
Kommentar
Fra : Pistolprinsen


Dato : 03-09-06 14:43

Tak for svarene - og, især tak for det fede link

Pistolprinsen


"Paw P Larsen" <nospam@wer.dk> skrev i en meddelelse
news:edee1i.5u0.1@plawer.dk...
> Pistolprinsen wrote:
>> 2) Jeg har en standard besked, på 9 linier, der skal komme frem flere
>> gange undervejs i mit script, og det er lidt træls at skulle sidde og
>> lave disse linier gang på gang!
>> Og, disse 9 linier fylder osse godt op i mit script med alle de
>> gentagelser!
>> Kan man ikke lave disse linier i en form for varibel, og så blot
>> ECHO'e denne variabel?
>>
>> 3) Eller findes der en form for GOSUB... RETURN... i DOS?
>
> Jeg ville leve med at lave lidt mere copy-paste. Der er ikke nogen
> gosub/return. Workaround kan være at sætte en værdi inden GOTO og så have
> IF sætninger til at returnere til et givent punkt.
>
> Alternativt teksten i en tekstfil og TYPE tekstfil
>
>> 5) Mit .BAT script skal rulle en række mapper, hver gang det køres, ved
>> at RENAME dem.
>> Altså således at mappe ZY bliver til ZZ
>> Mappe ZX bliver til ZY
>> Mappe ZW bliver til ZX
>> Helt ned til, hvor mappe AA bliver til AB.
>>
>> Når alle mapperne så er rullet, så ved jeg at de nyeste data ligger i
>> mappe AA, og data for de foregående timer ligger i mapperne fra AB og
>> opefter, således, at ældeste sæt data ligger i mappe ZZ.
>>
>> Men, det bliver jo til en farlig masse linier i mit .BAT script!!!
>> Ikke færre end 675 linier!
>>
>> Kan dette laves på en smart måde i en form for løkke?
>
> FOR, eller måske nested FOR
>
> Kig evt. på http://www.robvanderwoude.com/ for eksempler.



Bertel Brander (03-09-2006)
Kommentar
Fra : Bertel Brander


Dato : 03-09-06 16:15


Snakker vi DOS eller en commandoprompt under
windows? Hvilke windows versioner.
Nedenstående går ud fra at det er windows NT/2000/XP

> 1) Kan man lave et linie skift i en ECHO kommando?

Nej, en echo er en linie.

> 2) Jeg har en standard besked, på 9 linier, der skal komme frem flere gange
> undervejs i mit script, og det er lidt træls at skulle sidde og lave disse
> linier gang på gang!
> Og, disse 9 linier fylder osse godt op i mit script med alle de
> gentagelser!
> Kan man ikke lave disse linier i en form for varibel, og så blot ECHO'e
> denne variabel?

Du kan kalde en funktion med call :Label
Du returnere fra "funktionen" med goto :eof, goto :eof
kan også bruges til at afslutte .bat-filen

Så du kan putte dette ind i enden af .bat - filen

goto :eof
:StandardBesked:
echo Linie 1
echo Linie 2
echo Linie 3
goto :eof

Og så kalde den med
Call :StandardBesked


Funktionen kan få parametre på samme måde som en .bat-fil,
i funktionen bliver de til %1 %2.

Et eksempel:
call :StandardBesked Hello
goto :eof

:StandardBesked
echo %1
goto :eof

Det vil udskrive Hello

Du kan også bruge goto :label men dem kan man ikke returnere fra

> 5) Mit .BAT script skal rulle en række mapper, hver gang det køres, ved at
> RENAME dem.
> Altså således at mappe ZY bliver til ZZ
> Mappe ZX bliver til ZY
> Mappe ZW bliver til ZX
> Helt ned til, hvor mappe AA bliver til AB.
>
> Når alle mapperne så er rullet, så ved jeg at de nyeste data ligger i
> mappe AA, og data for de foregående timer ligger i mapperne fra AB og
> opefter, således, at ældeste sæt data ligger i mappe ZZ.
>
> Men, det bliver jo til en farlig masse linier i mit .BAT script!!!
> Ikke færre end 675 linier!
>
> Kan dette laves på en smart måde i en form for løkke?

Ja, men det er lidt bøvlet, jeg kan godt prøve at lave det,
men jeg har først tid sent i aften.

--
Just another homepage:
http://damb.dk
But it's mine - Bertel

Bertel Brander (03-09-2006)
Kommentar
Fra : Bertel Brander


Dato : 03-09-06 22:21

Bertel Brander wrote:
>> Kan dette laves på en smart måde i en form for løkke?
>
> Ja, men det er lidt bøvlet, jeg kan godt prøve at lave det,
> men jeg har først tid sent i aften.

Det kunne se som følger
Du skal selv rette:
Letters="E D C B A"
Så alle bogstaver er med
Og
set NumLetters=5
Til antal bogstaver

@echo off
setlocal
set Letters="E D C B A"
set NumLetters=5
set First=

for /L %%A in (1, 1, %NumLetters%) do call :Func1 %%A
goto :eof

:Func1
for /F "tokens=%1" %%A in (%Letters%) do call :Func2 %%A
goto :eof

:Func2
Set FirstLetter=%1
for /L %%A in (1, 1, %NumLetters%) do call :Func3 %%A
goto :eof

:Func3
for /F "tokens=%1" %%A in (%Letters%) do call :Func4 %FirstLetter% %%A
goto :eof

:Func4
Set Current=%1%2
if [%First%]==[] (
set First=%Current%
) else (
ren %Current% %First%
set First=%Current%
)

--
Just another homepage:
http://damb.dk
But it's mine - Bertel

Pistolprinsen (04-09-2006)
Kommentar
Fra : Pistolprinsen


Dato : 04-09-06 04:09

Hej Bertel,


Tusind tak for din tid og hjælpsomhed.

Desværre får jeg ikke tid til at kigge på det før tidligst tirsdag, da vi i
dag og i morgen har månedsafslutning i firmaet, hvilket betyder et par lange
arbejdsdage.

Men, jeg skal nok vende tilbage med en melding, så snart jeg har prøvet det.


mvh.,

Pistolprinsen


"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:44fb472b$0$3469$edfadb0f@dread11.news.tele.dk...
> Bertel Brander wrote:
>>> Kan dette laves på en smart måde i en form for løkke?
>>
>> Ja, men det er lidt bøvlet, jeg kan godt prøve at lave det,
>> men jeg har først tid sent i aften.
>
> Det kunne se som følger
> Du skal selv rette:
> Letters="E D C B A"
> Så alle bogstaver er med
> Og
> set NumLetters=5
> Til antal bogstaver
>
> @echo off
> setlocal
> set Letters="E D C B A"
> set NumLetters=5
> set First=
>
> for /L %%A in (1, 1, %NumLetters%) do call :Func1 %%A
> goto :eof
>
> :Func1
> for /F "tokens=%1" %%A in (%Letters%) do call :Func2 %%A
> goto :eof
>
> :Func2
> Set FirstLetter=%1
> for /L %%A in (1, 1, %NumLetters%) do call :Func3 %%A
> goto :eof
>
> :Func3
> for /F "tokens=%1" %%A in (%Letters%) do call :Func4 %FirstLetter% %%A
> goto :eof
>
> :Func4
> Set Current=%1%2
> if [%First%]==[] (
> set First=%Current%
> ) else (
> ren %Current% %First%
> set First=%Current%
> )
>
> --
> Just another homepage:
> http://damb.dk
> But it's mine - Bertel



Søg
Reklame
Statistik
Spørgsmål : 177503
Tips : 31968
Nyheder : 719565
Indlæg : 6408542
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste