Programm mit Parametern aus der Kommandozeile starten



  • Hallo Zusammen,

    kann mir jemand sagen wie ich ein unter Visual C++ (VS 2008) geschriebenes Programm mit verschiedenen Parametern aus der Kommandozeile aus starten kann.

    Im Stil wie z.B. xcopy. Wenn ich xcopy mit /? starte, bekomme ich alle Parameter zurück die möglich sind. Ich kann das Programm jedoch auch mit verschieden Parametern starten. (Mit 2,3,4,5…. so wie ich lustig bin).

    Mein Beispiel-Testprogramm:

    Text.exe –i (integer übergeben) –s (CString übergeben)

    Beim nächsten Start wird jedoch nur ein Integer übergeben.

    Text.exe –i (integer übergeben)

    Ich bin wohl schon über die

    int main(int argc, char **argv)
    

    – Funktion gestolpert, jedoch wird hier doch keine Zuordnung gemacht, dass bei –i der Integer Wert folgt und bei -s z.B. der CString …oder ?

    Wäre für ein kleines Beispiel oder einen hilfreichen Link sehr erfreut 🙂

    Dank und Gruß
    gorbo



  • das was du an eine exe an parametern übergibst ist immer ein String bzw. wird als solcher behandelt.

    die parameter in der funktion

    int main(int argc, char **argv)
    

    int argc gibt an wieviel argumente übergeben wurde bzw. wie groß der bereich des nächsten argumentes ist.

    char **argv ist ein string bereich der die übergebenen argumente beinhaltet.

    wie du das auseinanderklabüsterst ist dein problem.

    Parameterübergabe an exe:

    -i=5 -s=Blub -x=0xa35f

    argc = 2

    argv[0] = -i=5
    argv[1] = -s=Blub
    argv[2] = -x=0xa35f



  • 20:39:06 20.08.2009 Titel: Zitieren
    das was du an eine exe an parametern übergibst ist immer ein String bzw. wird als solcher behandelt.

    die parameter in der funktion
    Code:
    int main(int argc, char **argv)
    Code:
    int main(int argc, char **argv)
    Code:
    int main(int argc, char **argv)

    int argc gibt an wieviel argumente übergeben wurde bzw. wie groß der bereich des nächsten argumentes ist.

    char **argv ist ein string bereich der die übergebenen argumente beinhaltet.

    wie du das auseinanderklabüsterst ist dein problem.

    Parameterübergabe an exe:

    -i=5 -s=Blub -x=0xa35f

    argc = 2

    argv[0] = -i=5
    argv[1] = -s=Blub
    argv[2] = -x=0xa35f


  • Mod

    Anymouse schrieb:

    Parameterübergabe an exe:

    -i=5 -s=Blub -x=0xa35f

    argc = 2

    argv[0] = -i=5
    argv[1] = -s=Blub
    argv[2] = -x=0xa35f

    Das ist nicht korrekt ⚠
    Siehe http://msdn.microsoft.com/en-us/library/88w63h9k.aspx

    argv[0] ist meisten der Programmname.
    Du übrgibst drei Parameter, also ist
    argc =4
    argv[0] = Programmname
    argv[1] = -i=5
    argv[2] = -s=Blub
    argv[3] = -x=0xa35f[/quote]



  • Auch ausserhalb der (Win)main-Funktion kannst du bei MSVC quasi global auf die Parameter zugreifen viá

    __argc =4
    __argv[0] = Programmname
    __argv[1] = -i=5
    __argv[2] = -s=Blub
    __argv[3] = -x=0xa35f
    


  • Hi,

    da möchte ich noch meinen Senf dazugeben:

    Grundsätzliches zu den globalen Variablen __argc und __argv:
    Die Inhalte von __argc und __argv stimmen nicht exakt mit den tatsächlichen Kommandozeilen-Optionen überein, z.B.:
    -Ein Leerzeichen bedeutet immer ein neuer Teilstring, z.B. aus "-inifile = no" werden "-inifile", "=" und "no"!
    -Es findet eine spezielle Behandlung des Anführungszeichens '"' statt: z.B. aus <-inipath="E:\Meine Dateien\"> wird <-inipath=E:\Meine Dateien">

    Dies erschwert das Parsen von Kommandozeilen-Optionen unnötig.
    Deshalb habe ich als Grundlage für das Parsen von Kommandozeilen-Optionen der String von GetCommandLine() hergenommen: http://msdn.microsoft.com/en-us/library/ms683156(VS.85).aspx

    Diese Funktion ist sowohl für ANSI als auch für UNICODE geeignet.

    Martin


Anmelden zum Antworten