Avatar billede bernhof Nybegynder
14. marts 2006 - 12:31 Der er 7 kommentarer og
1 løsning

Udfør command line

Hej

Når jeg vil udføre en command line i .NET vil jeg under normale omstændigheder benytte Process.Start, og relaterede klasser. Men når jeg benytter disse, skal min command opdeles i filnavn og parametre, hvilket normalt er fint nok, da man ved hvilken kommando, der er tale om.

Men i mit tilfælde indtaster brugeren selv en kommando linie bestående af både filnavn og parametre, som mit program skal eksekvere, fx.:

  dostuff -b -a

eller en lidt mere indviklet udgave:

  "C:\Folder with space\dostuff.exe" -b -a

Enten kan jeg selv opdele disse kommando linier i filnavn og parametre (men det er ikke bare så simpelt som at lede efter det første mellemrum) eller finde en måde at gøre det, automatisk, i .NET, hvis muligt.

Er det muligt at få det gjort automatisk i .NET?
Avatar billede bernhof Nybegynder
14. marts 2006 - 12:33 #1
Altså - normalt kan man skrive:

  Process.Start("C:\fil.exe", "-b -a")

Men jeg havde håbet på, at den selv kunne inddele det, hvis man bare stak den hele linien i en constructor:

  Dim x As New ProcessStartInfo("C:\fil.exe -b -a")
  Process.Start(x)

Men det er ikke muligt.
Avatar billede arne_v Ekspert
14. marts 2006 - 13:20 #2
Har du proevet:

Process.Start("C:\fil.exe -b -a")

den plejer faktisk at virke på windows.

Ellers bliver du nok nødt til at skrive en lille mini parser som deler ved mellemrum
der ikke er inden i "" (for loop + switch + inquote bool variabel)
Avatar billede bernhof Nybegynder
14. marts 2006 - 13:53 #3
Mini-parseren var også den eneste mulighed jeg umiddelbart så.

Følgende giver mig bare 'The system cannot find the file specified':

  Process.Start("cmd /c ""ping 127.0.0.1""")

Hvorimod hvis jeg kører

  cmd /c "ping 127.0.0.1"

via Start > Kør, så virker det fint.
Avatar billede bernhof Nybegynder
15. marts 2006 - 10:19 #4
Har du selv prøvet Process.Start("fil og parameter"), hvor det virkede?
Avatar billede arne_v Ekspert
15. marts 2006 - 13:14 #5
ikke fra .NET

men så må konklusionen jo være: for loop + switch + inquote bool variabel
Avatar billede arne_v Ekspert
15. marts 2006 - 13:15 #6
oversat til VB.NET ...
Avatar billede bernhof Nybegynder
15. marts 2006 - 14:24 #7
Ok. Ja, jeg prøver parseren. Benytter dog bare følgende regex:

(?:"(.*?)"|(.*?))\s(.*)

Lægger du lige et svar?
Avatar billede arne_v Ekspert
16. marts 2006 - 05:54 #8
ok
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
Kurser inden for grundlæggende programmering

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