Windows 7, показывать пути с косой чертой вместо обратной косой черты

Windows 7, показывать пути с косой чертой вместо обратной косой черты

Я ищу способ заставить Windows всегда отображать пути в виде слешей, а не обратных слешей, чтобы избежать лишних хлопот при копировании и вставке путей в код Java.

Чтобы было понятнее, я хочу, чтобы это было представлено по умолчанию:

поведение Explorer по умолчанию

быть таким:

Поведение исследователя, которое я хочу

Как мне это сделать? Любая помощь будет принята с благодарностью, так как это сводит меня с ума.

решение1

ИспользоватьПуть копировать копироватьпрограммное обеспечение:

Скриншот копии пути Unix

Включите опцию копирования пути UNIX в настройках.

путь копировать копировать настройки скриншот

решение2

Я реализовал это так, как предложил Ankit. Реализация стала немного сложнее, потому что переписанный путь больше не может использоваться для вставки фактического файла (не пути как текста). Я обошел это, обнаружив ситуации, когда, как я предполагаю, будет использоваться только текстовое представление. Технически, насколько я понимаю реализацию буфера обмена Windows, можно было бы даже изменить только текстовое представление пути, но я оставляю эту задачу открытой для кого-то другого. Не уверен, можно ли это сделать с помощью AutoHotKey.

По этой причине скрипт AutoHotKey был написан для следующего рабочего процесса:

  1. Сделайте то же, что вы обычно делаете, чтобы скопировать путь.
  2. Мы стараемся делать все необходимое, чтобы в буфере обмена был чистый путь.
  3. Если мы не можем сделать это по умолчанию (мы не знаем, что это сохранено), мы ничего не делаем, и вам придется вручную очистить путь в буфере обмена, нажав Shift+ Super+ C.

Подробности смотрите в коде:

#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

;; }}}

(Это также отслеживается на GitHub:https://github.com/ypid/dotfiles/blob/master/windows/neo-vars/source/custom.ahk)

Также спасибо Katharsas за открытие запроса на отзыв в "Feedback Hub App for Windows 10". Предпочтительнее была бы собственная поддержка, но я не думаю, что Microsoft сделает это в разумные сроки. Так что нам просто придется сделать это самим с помощью такого рода взлома. Прямые слеши — лучший кроссплатформенный разделитель путей. Никогда не позволяйте Microsoft диктовать вам что-либо. Наслаждайтесь ;-)

решение3

Запустите следующую функцию в PowerShell:

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

Затем вы можете использовать его, скопировав пути и запустив slashв PowerShell.

Это не прямой способ сделать это, но он подойдет, если он вам нужен только для небольших непрерывных сеансов и вы не хотите устанавливать какие-либо сторонние приложения.

решение4

Этого можно добиться с помощью некоторого скрипта, который может получить доступ к буферу обмена. Он будет работать следующим образом:

  • Выберите и скопируйте путь, содержащий \.
  • Нажмите любую горячую клавишу, чтобы активировать скрипт.
  • Этот скрипт получает доступ к содержимому буфера обмена и использует простую логику для замены каждого вхождения \на /.
  • Теперь содержимое буфера обмена содержит путь с /.

Сценарий может бытьПАРТИЯфайл илиAutoHotKeyСкрипт. Но я не думаю, что летучая мышь может получить доступ к содержимому буфера обмена. Так что Autohotkey будет лучшим вариантом.

Связанный контент