Windows-Dateinamensparameterbehandlung bei Dateitypaktion

271
vlad_tepesch

Ich habe ein Tool, das ich zum Shell-Unterschlüssel des any-file-Schlüssels unter HKEY_CLASSES_ROOT hinzugefügt habe, so dass es im Rechtsklick-Menü einer beliebigen Datei erscheint (auch im Verzeichnis-Menü).

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard] @="Path -> Clipboard"  [HKEY_CLASSES_ROOT\*\shell\PathToClipboard\command] @="C:\\Program Files (x86)\\PathToClipboard.exe %1" 

Das Tool führt nichts weiter aus, als den angegebenen Parameter (den Dateipfad) in die Zwischenablage zu kopieren.

Dies funktionierte zumindest seit Win ME (seitdem möglicherweise neu kompiliert) seit Ewigkeiten. Es funktioniert auch für Win-7, jedoch mit einigen Macken: Wenn der Dateipfad Leerzeichen oder andere nicht-alphanumerische Zeichen enthält, wird er auf den DOS-Kompatibilitätsnamen verkürzt.

Zum Beispiel: C:\PROGRA~2\PATHTO~1.EXE

Gibt es da einen Weg?

Wenn ich setzen "um das %1ist der Weg richtig, aber Fenster geht auch die "an das Programm (das ich nicht schon eine ganze Weile berührt haben. Sicher, dass ich das in dem Werkzeug lösen könnte, aber ich frage mich, ob das rohe Verhalten an Fenstern Seite befestigt werden könnte) .

1
Haben Sie versucht, "C: \ Programme (x86) \ PathToClipboard.exe" "% 1" `` zu verwenden? Beachten Sie die zusätzlichen `` `s und entfernte Backslashes. DavidPostill vor 8 Jahren 0
Siehe auch [So deaktivieren Sie die 8.3-Dateinamenerstellung auf NTFS-Partitionen] (https://support.microsoft.com/en-us/kb/121007) DavidPostill vor 8 Jahren 0
@DavidPostill Sie können die doppelten Backslashes nicht aus der Reg-Datei entfernen. In der Registry sind sie natürlich single. Wenn Sie den Programmpfad jedoch zwischen "" "setzen, wird das Problem gelöst. Die"% 1 "-Dateien müssen sich nicht zwischen Anführungszeichen befinden. Andernfalls wird der kopierte Pfad auch in Anführungszeichen gesetzt. Wenn Sie dies als Antwort posten, akzeptiere ich es - Danke du! dein zweiter Vorschlag fühlt sich brutal an - ich weiß nicht, ob er anderes Zeug bricht. vlad_tepesch vor 8 Jahren 0
Schön, dass du es funktioniert hast. Antwort hinzugefügt;) DavidPostill vor 8 Jahren 0

1 Antwort auf die Frage

1
DavidPostill

Wenn der Programmname Leerzeichen oder andere nicht alphanumerische Zeichen enthält, wird er auf den DOS-Kompatibilitätsnamen verkürzt.

@="C:\\Program Files (x86)\\PathToClipboard.exe %1" 

Die Anführungszeichen sollten um die einzelnen Teile herum sein, nicht um die komplette Zeichenfolge.

In diesem Fall sollten Sie nur den ersten Teil (Programmnamen) und die gesamte Zeichenfolge angeben:

@="\"C:\\Program Files (x86)\\PathToClipboard.exe\" %1" 

Hinweis:

  • \ wird verwendet, um die inneren Anführungszeichen (die um den Programmnamen) zu umgehen
  • Wenn Sie auch den %1(den Dateipfad) zitieren, werden die Anführungszeichen hinzugefügt, wenn der Dateipfad an das Programm übergeben wird. Zitieren Sie diesen Teil daher nicht.
Die richtige Zeichenfolge für den Export von Reg-Dateien würde folgendermaßen aussehen: @ = "\" C: \\ Programme (x86) \\ PathToClipboard.exe \ "% 1" `` in regedit.exe würde es als `" C angezeigt werden : \ Programme (x86) \ PathToClipboard.exe "% 1" Die Anführungszeichen um den gesamten Ausdruck (und die darin enthaltenen Escapezeichen) hinter dem "@ =" sind obligatorisch, andernfalls liefert regedit beim Lesen der `.reg einen Parser-Fehler `Datei vlad_tepesch vor 8 Jahren 0
Ah. OK. Antwort aktualisiert DavidPostill vor 8 Jahren 0
anfangs habe ich das `.reg`-File-Export-Format verwendet, weil ich dachte, es wäre ein schönes Format, um die Struktur der Werte und Pfade genau zu definieren (besser als einen String-Wert des Standardwerts unter dem Schlüssel XY zu schreiben), aber jetzt ich Ich denke, ich habe Verwirrung über den tatsächlichen Wert hinzugefügt (in Bezug darauf wird in regedit.exe angezeigt und eingefügt). vlad_tepesch vor 8 Jahren 0
@vlad_tepesch Ich denke, alles ist so klar wie jetzt;) DavidPostill vor 8 Jahren 0