|
| 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
| |
|
|