Avatar billede hansjacob Nybegynder
19. oktober 2004 - 08:09 Der er 6 kommentarer og
1 løsning

Batch script med argumenter [optional]

Hej

Hvordan/kan man lave et batch script, der tager argumenter ind som de sædvanlige windows rutiner? Dvs.

mitScript Arg1 -sTesting -pEnTo

Jeg vil således gerne have at scriptet putter værdien efter -s ind i en bestem variabel, således at antallet og rækkefølgen af argumenter ikke er afgørende for resultatet. Dvs. jeg kan ikke bruge %1, %2 og %3.

Håber I forstår mit spørgsmål og kan hjælpe.
Avatar billede bertelbrander Novice
19. oktober 2004 - 19:58 #1
Man kunne starte med noget i stil med:

@echo off
setlocal
set SOpt=
set POpt=
set Arg1=

:Start
if [%1]==[] goto Done
set XXX=%1

if %XXX:~0,1%==- (
  if [%XXX:~1,1%]==[s] (
    set SOpt=%XXX:~2%

  ) else (
    if [%XXX:~1,1%]==[p] (
      set POpt=%XXX:~2%
    ) else (
      echo Unknown option: %XXX%
    )
  )
) else (
  if [%Arg1%]==[] (
    set Arg1=%XXX%
  ) else (
    echo Arg1 has been set
  )
)
shift
goto Start

:Done

if not [%SOpt%]==[] echo S: %SOpt%
if not [%POpt%]==[] echo P: %POpt%
if not [%Arg1%]==[] echo Arg1: %Arg1%
Avatar billede hansjacob Nybegynder
11. november 2004 - 09:29 #2
Undskyld det sene svar. Det virker lige som det skal! Tak for hjælpen.
Avatar billede hansjacob Nybegynder
11. november 2004 - 09:37 #3
Vil du have point, må du lige svare, så skal jeg med glæde give dig dem.
Avatar billede hansjacob Nybegynder
11. november 2004 - 15:36 #4
Jeg har lige et lille tillægsspørgsmål:

Jeg har lavet dette script. Formålet med det er, at løbe en tilfældig streng igennem og skriver det pågældende bogstav ud. Problemet er bare, at det ikke virker for strenge med længden 1. Dvs ex "DOpt=1".

Hvordan får jeg den til det?

(Hvor mange flere point vil du have for det?)

@echo off
set DOpt=12
    :dimLoop
    echo %DOpt%
    echo %DOpt:~0,1%
    set DOpt=%DOpt:~1%

    if [%DOpt:~1,1%]==[] (
        echo STOP
        goto stopall
    )
    goto dimLoop
:stopall
Avatar billede bertelbrander Novice
11. november 2004 - 18:43 #5
Måske:

@echo off
set DOpt=12
:dimLoop
echo %DOpt:~0,1%
if [%DOpt:~0,1%]==[%DOpt%] (
  echo STOP
  goto :stopall
)
set DOpt=%DOpt:~1%
goto dimLoop
:stopall

Jeg samler ikke på point, så mine svar er gratis.
Avatar billede hansjacob Nybegynder
12. november 2004 - 09:11 #6
Lækkert. Jamen så vil jeg da bare sige tusind tak. Nu virker det perfekt!!
Avatar billede hansjacob Nybegynder
12. november 2004 - 09:12 #7
...og lige et svar -> SE BERTELBRANDER
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester