Forum: PC-Programmierung Komandozeilenparameter/CMD Pfad Angabe


von Hans (Gast)


Lesenswert?

Hallo,
wenn ich mein Programm durch Doppelklick starte gibt es mir den 
Kompletten Pfad heraus. So erwarte ich es auch…
Aber wenn ich das Programm durch ein Bachskript starte wird nur der .exe 
Name ausgegeben.
1
printf("%s\n", argv[0]);
Wieso wird durch das sparten mit Bach der Pfad nicht komplett 
ausgegeben?
Wie kriegt man den kompletten Pfad wenn man ein Programm durch das 
Bachskript startet?

Sys ist Win 7
Danke.

von DanVet (Gast)


Lesenswert?

Vielleicht musst du in der Batch einfach nur den kompletten Pfadnamen 
eingtragen ?, also statt

"programm.exe"

"c:\Tools\...\programm.exe"

von Ma S. (turbotorsten)


Lesenswert?

ich weiß war nicht wie deine batch aussieht und was sie genau können 
soll.
Aber folgendes ist evtl. hilfreich bei so wenig Information.

erstmal ein % zeichen für das Argument
dann ein
~d für die drive
oder
~p für path
oder
~n für filename
kombiniert als ~dp für drive + path
oder noch besser ~dpn für drive + path + filename...
jetzt noch ne 0 dahinter da du den filename der Datei haben möchtest. 1 
für das erste argument 2 fürs weite und so weiter.

%~dpn0 für drive+path+filename als ausgabe.
falls du noch mehr ausgeben lassen möchtest, kannst du hier nachschlagen 
was alles so möglich ist:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hans schrieb:
> Wie kriegt man den kompletten Pfad wenn man ein Programm durch das
> Bachskript startet?

Indem Du den übergebenen relativen Pfad in einen absoluten konvertierst.

https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfullpathnamea

Dann kann Dein Programm auch per Ba_t_chskript gestartet werden, oder 
aus der Eingabeaufforderung, oder wie auch immer.

Daß beim Doppelklick der komplette Pfad übergeben wird, ist eine 
Eigenheit des Explorers.

von Hans (Gast)


Lesenswert?

Danke euch.
Rufus es war was ich brauchte.

von Timmo H. (masterfx)


Lesenswert?

Geht auch so:
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
int main() {
5
6
    printf("%s",_pgmptr);
7
8
}
oder so
1
#include <stdio.h>
2
#include <windows.h>
3
4
int main() {
5
    char fullpath[100];
6
    GetModuleFileName(NULL,fullpath,sizeof(fullpath)-1);
7
    printf("%s",fullpath);
8
9
}

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.