Windows 7, muestra rutas con barra diagonal en lugar de barra invertida

Windows 7, muestra rutas con barra diagonal en lugar de barra invertida

Estoy buscando una manera de hacer que Windows siempre presente las rutas como barras diagonales en lugar de barras invertidas para ahorrarme muchos problemas al copiar y pegar rutas en el código Java.

Para que quede más claro, quiero la presentación predeterminada de esto:

Comportamiento predeterminado del Explorador

ser esto:

Comportamiento del explorador que quiero

¿Cómo puedo hacer esto? Cualquier ayuda será muy apreciada ya que me está volviendo loco.

Respuesta1

UsarCopia de ruta copiasoftware:

Captura de pantalla de copia de ruta de Unix

Habilite la opción de copia de ruta UNIX desde la configuración.

captura de pantalla de configuración de copia de copia de ruta

Respuesta2

Lo implementé como sugirió Ankit. La implementación se volvió un poco más complicada porque la ruta reescrita ya no se puede usar para pegar el archivo real (no la ruta como texto). He solucionado este problema detectando situaciones en las que supongo que solo se utilizará la representación de texto. Técnicamente, según tengo entendido la implementación del portapapeles de Windows, incluso sería posible cambiar solo la representación del texto de la ruta, pero dejo esa tarea abierta a otra persona. No estoy seguro si eso se puede hacer con AutoHotKey.

Debido a esto, el script AutoHotKey se escribió para el siguiente flujo de trabajo:

  1. Haga lo que suele hacer para copiar una ruta.
  2. Intentamos hacer lo necesario para tener un camino limpio en el portapapeles.
  3. Si no podemos hacerlo por defecto (no sabemos que está guardado), no hacemos nada y hay que limpiar manualmente la ruta en el portapapeles presionando Shift++ Super.C

Para más detalles, echa un vistazo al código:

#SingleInstance force
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

SetTitleMatchMode, RegEx

;; Use this until I hit the first issue then document here and set back to default value.
SetDefaultMouseSpeed, 0

;; Copy clean file/directory path to clipboard (use forward slashes as file separators) {{{
;; https://stackoverflow.com/questions/1589930/so-what-is-the-right-direction-of-the-paths-slash-or-under-windows/1589959#1589959

;; WARNING: This clipboard substitution has the issue that after the substitution, pasting the file does not work anymore!!
;; Because of this, we don’t run the substitution OnClipboardChange globally but only when we consider it save and otherwise using a (manual) shortcut.
;; Situations where we know it is save:
;; * Double Commander calls CopyFullNamesToClip.
;; * Location bar in Explorer has focus. See limitations below!

;; The expected workflow is:
;; 1. Do what you usually do to copy a path.
;; 2. We try to do what is necessary to have a clean path in the clipboard.
;; 3. If we cannot do it by default (we don’t know that it is save), we do nothing and you have to manually make the path in the clipboard clean by pressing Shift+Super+C.

;; Ref: Get-CleanPath in ../../MS_Shell/Modules/ypidDotfiles/ypidDotfiles.psm1
;; Seems up to and including Windows 10, UNC paths with forward slashes don’t work.
;; At least //files.example.org/home and \\files.example.org/home and //files.example.org\home don’t work.
clean_path_in_clipboard() {
    If (RegExMatch(Clipboard, "^(?i)(?:[a-z]:)?\\[^\\]")) {
        StringReplace, Clipboard, Clipboard,\,/, All
    }
    Return
}

;; Shift+Super+C | Clean file/directory path in clipboard {{{
+#C::
    ; ClipSaved := ClipboardAll
    ; Clipboard = 

    ; Send ^c
    ;; Ensure that we are only working on text.
    ; ClipWait

    ; currentPath =
    ; WinGetClass explorerClass, A
    ; ControlGetText currentPath, Edit1, ahk_class %explorerClass%
    ; msgbox %currentPath%

    ; If (ErrorLevel) {
    ;     Clipboard := ClipSaved
    ;     MsgBox, 48, Clipboard copy warning, Failed to copy to clipboard.
    ;     Return
    ; }

    clean_path_in_clipboard()
Return
;; }}}

;; Shift+Alt+C | Hook Double Commander calls to CopyFullNamesToClip and run clean_path_in_clipboard afterwards.
;; We can "safely" do this because when CopyFullNamesToClip is called, the user wants to copy the path as text.
#UseHook
#IfWinActive ahk_exe doublecmd.exe
+!c::
    Send +!c
    clean_path_in_clipboard()
Return
#IfWinActive
#UseHook off

OnClipboardChange:
    ;; Fix file path when in transit in Explorer (or Double Commander).
    ;; Ensure that we are only working on text.
    If (WinActive("ahk_exe (?i)(?:explorer.exe|doublecmd.exe)") and A_EventInfo == 1) {

        ;; Location bar in Explorer has focus.
        ;; Run clean_path_in_clipboard after copying text to clipboard in Explorer when cursor is above "Location bar" known as Edit1 (bad programming/variable naming M$??).
        ;; Technically this is not 100 % bulletproof because you could do the copy to clipboard with Ctrl+L followed Ctrl+C while the cursor focuses some other control.
        If (WinActive("ahk_exe (?i)(?:explorer.exe)")) {
            MouseGetPos, , , , control_below_cursor
            If (control_below_cursor == "Edit1") {
                clean_path_in_clipboard()
            }
        }

        ;; We cannot do this globally, see WARNING above.
        ; clean_path_in_clipboard()
    }
return

;; }}}

(Esto también se rastrea en GitHub:https://github.com/ypid/dotfiles/blob/master/windows/neo-vars/source/custom.ahk)

También gracias a Katharsas por abrir una solicitud de comentarios en "Aplicación Feedback Hub para Windows 10". Se preferiría el soporte nativo, pero no creo que Microsoft lo haga en un plazo de tiempo razonable. Así que tenemos que hacerlo nosotros mismos mediante este tipo de piratería. Las barras diagonales son el mejor separador de caminos entre plataformas. Nunca dejes que Microsoft te dicte nada. Disfrutar ;-)

Respuesta3

Ejecute la siguiente función en PowerShell:

function slash {
    Get-Clipboard | 
    % {$_ -replace '\\','/'} |
    Set-Clipboard ; echo 'Conversion done.'
}

Luego puedes usarlo copiando las rutas y ejecutándolo slashen powershell.

Esta no es una forma directa de hacerlo, pero funciona si sólo lo necesita para pequeñas sesiones continuas y no desea instalar ninguna aplicación de terceros.

Respuesta4

Esto se puede lograr usando algún script, que pueda acceder al portapapeles, funcionará de esta manera:

  • Seleccione y copie la ruta que contiene \.
  • Presione alguna tecla de acceso rápido para activar el script.
  • Ese script accede al contenido del portapapeles y utiliza una lógica simple para reemplazar cada aparición de \to /.
  • Ahora el contenido del portapapeles contiene una ruta con /.

El guión puede ser unLOTEarchivo o unAutoHotKeyGuion. Pero no creo que un murciélago pueda acceder al contenido del portapapeles. Entonces Autohotkey será la mejor opción.

información relacionada