Forum: PC Hard- und Software Dateiverknüpfung mit Batch-Datei


von Uwe B. (uwe_beis)


Lesenswert?

Hallo zusammen,

ich suche eine Möglichkeit, die Zuordnung von Dateiendungen zu 
Programmen so zu verwenden, dass nicht, wie üblich, eine .EXE, sondern 
eine .BAT mit der rechten Maustaste gestartet werden kann.

Innerhalb der aufzurufenden Batch-Datei wird letztendlich wieder eine 
.EXE gestartet, aber vorab werden eine Menge Daten aufbereitet.

Ich habe kein Problem, den entsprechenden Eintrag in der Registry zu 
machen, aber alle Versuche, die ich bisher gemacht habe, sind ebenso wie 
meine Websuche gescheitert. Nebenbei: Über die Registry lege ich auch 
andere Aufruf-Optionen für die rechte Maustaste fest.

Nicht funktioniert hat z. B. für die Zuordnung .XXX -> Konverter1.bat in
[HKEY_CLASSES_ROOT\XXXFile\shell\Konverter1\command] = cmd 
"Konverter1.bat %1"
mit verschiedenen Optionen und Anführungszeichen.

Geht das überhaupt?

Das ganze unter Windows 10, das ohnehin sich ziemlich unwillig anstellt, 
wenn man Dateiendungen zuordnen will. Beispiel: Eine Möglichkeit, in den 
Eigenschaften mehrere Optionen anzugeben, was früher einfach war, habe 
ich noch nicht gefunden. Das schaffe ich nur über die Registry.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Uwe B. schrieb:
> dass nicht, wie üblich, eine .EXE, sondern eine .BAT mit der rechten
> Maustaste gestartet werden kann.

?

Wenn ich einen Rechtsklick auf eine *.bat-Datei ausführe, ist die im 
Kontextmenü hervorgehobene Standardaktion "Öffnen" - und das wiederum 
lässt den Kommandozeilenprozessor cmd.exe die Datei ausführen.

Was genau willst Du erreichen? Bellst Du möglicherweise den falschen 
Baum an?

von Uwe B. (uwe_beis)


Lesenswert?

Hi Rufus,

ich will mit einem Rechtsklick auf eine nicht-Batch Datei (keine 
.EXE!) einen Batch starten. So, wie ich auch mit einem Rechtsklick auf 
andere nicht-ausführbare Dateien eine .EXE starten kann, will ich ich 
eine BAT starten (der dann der Dateiname, wie beim Start von .EXE, als 
%1 übergeben wird).

Wie konnte das unklar sein? Und dass man Batch-Dateien sowohl mit 
Rechts- als auch mit Linksklick starten kann, ist mir schon etwas länger 
bekannt...

Ich habe mal in der Registry nach dem Syntax zum Start einer .BAT 
geforscht. Einfach übernehmen geht nicht aber beim Modifizieren kam 
letztendlich auch nicht anderes bei heraus, als bei den Versuchen, die 
ich schon vorher gemacht hatte.

Ich könnte auch ein vereinfachtes Beispiel konstruieren, um das Ziel 
klarer zu machen.

Uwe

von Philip K. (pulsewidthmodul)


Lesenswert?

... Du möchtest die angewählte Datei also per rechtsclick an eine 
Bat-Datei übergeben, so wie man sie sonst an eine exe übergibt.

von M404 (Gast)


Lesenswert?

Man könnte einen neuen Eintrag ins Kontextmenü vornehmen. Dafür siehe 
beispielhaft: http://www.wintotal.de/tipparchiv/?id=847

von Uwe B. (uwe_beis)


Lesenswert?

@Philip: ja, so ist es auch kurz und knackig formuliert.

@M404: der Eintrag im Kontextmenü existiert schon, siehe meinen ersten 
Beitrag. Das ist nicht da Problem. Das Problem ist, dass entweder eine 
.BAT über das Kontext-Menü gar nicht gestartet werden kann, oder dass 
ich nicht weiß, wie man das macht bzw. die notwendige Syntax nicht 
kenne. Auch in dem Link wird nicht auf .BAT eingegangen.

Wie schon gesagt: Eine .BAT direkt aufzurufen und laufen zu lassen ist 
kein Problem, denn dann wird sie der cmd.EXE übergeben, so dass 
prinzipiell auch hier nur eine .EXE gestartet wird, der die .BAT 
übergeben wird. Ich will aber eine .IRGENDWAS einer 
MACH_MAL_WAS_MIT_IRGENDWAS.BAT übergeben, die ihrerseits dann natürlich 
innerhalb cmd.EXE laufen müsste.

Zur Info: Früher, unter XP, verwies dieser jetzt auch wieder in Win 10 
im Kontextmenü existierende Eintrag auf eine .EXE, die die gewünschte 
Funktion vollständig erfüllte. Sozusagen eine 
MACH_MAL_WAS_MIT_IRGENDWAS.EXE. Jetzt, unter Win 10, läuft diese .EXE 
nur noch dann, wenn vorher bestimmte Dateien korrekt vorbereitet werden. 
Da sehe ich, außer alles von Hand machen, nur eine Batch-Datei als 
Lösung. Innerhalb dieser Batch-Datei werden die notwendigen 
Vorbereitungen getroffen und die alte .EXE gestartet.

Grüße, Uwe

P.S.: Da fällt mir noch einfaches Beispiel für die Aufgabenstellung ein:
Wie kann man mit einem Eintrag im Kontextmenü dafür sorgen, dass bei 
einem Rechtsklick auf eine .TXT die angeklickte Datei gleichzeitig in 
Word, Notepad++ und Notepad geöffnet wird? Wer mir das zeigt, dürfte 
auch die Lösung für meine Frage wissen.

von M404 (Gast)


Lesenswert?

Dann lass es mich algorithmisch präzisieren.
Folgendes funktioniert (selbst getestet) unter Win7:

1. In Adresszeile im Win-Explorer eingeben: shell:sendto
2. Verknüpfung erstellen für deine *.bat
3. Rechtsklick auf *.IRGENDWAS
   ->Senden An "Name für deine Verknüpfung aus 2."


In der *.bat kann man den Übergabewert %1, in diesem die Adresse als 
string beispielhaft folgendermaßen verwenden:

-innerhalb der *.bat-------------------------------
0 @echo off & set /p Zeile=<%1
1 Echo Zeile 1 in "%1" ist: [%Zeile%]
2
3 start notepad %1
4 start write %1
---------------------------------------------------

0-1 Verarbeitung (Ausagebe der 1.Zeile) aus der *.IRGENDWAS direkt in 
der *.bat
3-4 Adresse der Datei als Übergabewert für andere Programme 
(exemplarisch Notepad und Wordpad)

von Matthias L. (limbachnet)


Lesenswert?

Die normalerweise für die Übergabe einer Datei an eine Batch vorgesehene 
Aktion ist halt nicht der Rechtsklick und die Auswahl aus dem 
Kontextmenü, sondern schlicht Drag and Drop - schnapp dir die Datei, 
zieh sie auf die Batch oder deren Verknüpfung und fertig. Ist eigentlich 
viel einfacher als irgendwelche Kontextmenü-Wursteleien.

Nur so als Alternativ-Vorschlag.

von Uwe B. (uwe_beis)


Lesenswert?

Das war sehr hilfreich. Im Wesentlichen hat es mir zwar nur geholfen, 
einen eigenen, blöden Fehler zu finden, aber ich habe auch neue 
Funktionen für Batch-Dateien kennen gelernt. (Früher war alles 
einfacher...)

Im Prinzip hatte bei mir schon alles fast richtig gelaufen. Der Batch 
selber hatte schon per Kommandozeile funktioniert, allerdings hatte ich 
in der Kommandozeile nur den Dateinamen für %1, also ohne Pfad und ohne 
Extension angegeben. Aber ich hatte nicht erkannt, dass beim Aufruf über 
das Kontext-Menü %1 Pfad und Extension enthielt, worauf im Batch die 
Datei nicht gefunden wurde und die Abarbeitung abgebrochen wurde. Die 
für solche Fälle vorgesehene Meldung war nicht mehr sichtbar. Deshalb 
dachte ich dass, der Batch gar nicht gestartet wurde oder %1 nicht 
übergeben wurde.

Da in meinem Batch eine Datei mit gleichem Namen, aber anderer Extension 
erzeugt wird, muss ich jetzt den Dateinamen von Pfad und Extension 
trennen. Zumindest muss ich die Extension abtrennen. Aber wie das geht, 
sollte ich auch noch alleine heraus finden. Ähnlich Konstrukte mit For 
/f etc. zum Vergleich vom Datum zweier Dateien habe ich schon in 
Betrieb.

Danke noch mal ?

Uwe

von Peter D. (peda)


Lesenswert?

Uwe B. schrieb:
> worauf im Batch die
> Datei nicht gefunden wurde und die Abarbeitung abgebrochen wurde.

Im Batch am Ende "Pause" schreiben, dann bleibt das Ausgabefenster 
stehen.
Wenn alle läuft, kann man es wieder löschen oder auskommentieren 
":Pause".

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Alternative zur Batchdatei:

VBscript. Bietet deutlich "mächtigere" Möglichkeiten zur String- und 
sonstigen Variablenverarbeitung, kann per Automation Programme steuern 
und auch auf die Registry zugreifen, und der Interpreter (cscript.exe) 
ist Bestandteil jeder Windows-Installation.

von Uwe B. (uwe_beis)


Lesenswert?

Mit Pause arbeite ich oft, aber hier hatte ich angenommen, dass der 
Batch gar nicht erst gestartet wurde, weil nichts zu sehen war...

Andererseits hatte ich auch für möglich gehalten, dass %1 nicht 
übergeben wurde. Da hätte ich untersuchen können, was da genau passiert 
- ach, ich hab' irgendwie gepennt.

von Richard H. (richard_h27)


Lesenswert?

Peter D. schrieb:
> Im Batch am Ende "Pause" schreiben, dann bleibt das Ausgabefenster
> stehen.
> Wenn alle läuft, kann man es wieder löschen oder auskommentieren
> ":Pause".

Das Programm soll erst mal richtig arbeiten, dann hat es eine Pause 
verdient.

Grüße
Richard

von Uwe B. (uwe_beis)


Lesenswert?

Richard H. schrieb:
> Das Programm soll erst mal richtig arbeiten, dann hat es eine Pause
> verdient.

Ja, dann habe ich mir jetzt eine Pause verdient. Alles klappt so, wie 
beabsichtigt. Es gab noch verschiedene Hürden, z. B., dass die 
Umgebungsvariablen beim Aufruf aus dem Kontextmenü nicht mit denen in 
der Eingabeaufforderung überein stimmen. Dazu, wie geschrieben, die 
Zerlegung des Übergabeparameters (dateipfad\dateiname.extension) in 
Einzelteile - na, ja, das ist mir zwar nicht gelungen, aber in 
dateipfad\dateiname hat gereicht. Da musste ich noch manche Pause 
einlegen - pardon, einfügen, bis es geklappt hat.

Grüße, Uwe

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.