当前位置: 首页 > article >正文

右键添加获取可供WSL使用的路径,对windows文件夹也适用,即获取符合Linux规范的路径内容给WSL

文章目录

  • 1. 功能展示
    • 1.1. 对 WSL 文件/文件夹/目录空白位置 使用
    • 1.2. 对 Windows 文件/文件夹/目录空白位置 使用
    • 1.3. Fin
  • 2. 方法
  • 3. 文件内容
    • 3.1. AddWSLPath.reg
    • 3.2. CopyPath.vbs
  • 4. 念念碎

1. 功能展示

1.1. 对 WSL 文件/文件夹/目录空白位置 使用

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6f676c0685734d19beb803f117fd98f5.png

输出 /etc

1.2. 对 Windows 文件/文件夹/目录空白位置 使用

在这里插入图片描述

输出 /mnt/d/hty/creat/code

1.3. Fin

获得的文件/文件夹路径可直接在 WSL 终端内直接使用:

在这里插入图片描述

2. 方法

新建内容如后所述的 CopyPath.vbsAddWSLPath.reg 文件,可用记事本创建,然后修改后缀名。

需要修改 AddWSLPath.regC:\\myScripts\\CopyPath.vbs 为你的 CopyPath.vbs 的路径,假设你的 CopyPath.vbs 放在 D:\AAA, 则写入:

[HKEY_CLASSES_ROOT\Directory\shell\Path for WSL\command]
@="wscript.exe \"D:\\AAA\" \"%1\""

AddWSLPath.reg 的 3 个路径位置都要修改。然后令 AddWSLPath.reg 用注册表编辑器打开,使之加入注册表即可。

如果功能没生效,打开注册表编辑器检查是否写入了。如果没写入,说明路径填错了:

  • 比如结尾少了个 \
  • 或者路径中的 \ 没有用 \\ 进行转义。

3. 文件内容

3.1. AddWSLPath.reg

Windows Registry Editor Version 5.00

; by 萌豚老师

[HKEY_CLASSES_ROOT\Directory\shell\Path for WSL]
@="Path for WSL"

[HKEY_CLASSES_ROOT\Directory\shell\Path for WSL\command]
@="wscript.exe \"C:\\myScripts\\CopyPath.vbs\" \"%1\""

[HKEY_CLASSES_ROOT\*\shell\Path for WSL]
@="Path for WSL"

[HKEY_CLASSES_ROOT\*\shell\Path for WSL\command]
@="wscript.exe \"C:\\myScripts\\CopyPath.vbs\" \"%1\""

[HKEY_CLASSES_ROOT\Directory\Background\shell\Path for WSL]
@="Path for WSL"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Path for WSL\command]
@="wscript.exe \"C:\\myScripts\\CopyPath.vbs\" \"%V\""

3.2. CopyPath.vbs

' by 萌豚老师

Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
    WScript.Echo "No argument provided"
    WScript.Quit
End If

' 获取第一个参数
strPath = objArgs(0)

' 使用 PowerShell 将路径复制到剪贴板
Set objShell = CreateObject("WScript.Shell")

Dim resultPath
resultPath = ""

Dim slashCount, i
slashCount = 0

' 处理 WSL 路径
If Left(strPath, 2) = "\\" Then
    ' 从第5个 \ 开始截取路径
    For i = 1 To Len(strPath)
        If Mid(strPath, i, 1) = "\" Then
            slashCount = slashCount + 1
        End If
        
        If slashCount >= 4 Then
            resultPath = Mid(strPath, i ) ' 从第5个斜杠后开始保留路径
            Exit For
        End If
    Next
Else
    ' 处理 Windows 路径
    resultPath = "/mnt/" & LCase(Left(strPath, 1)) & Mid(strPath, 3) 
End If

' 把路径中的 \ 替换为 /
resultPath = Replace(resultPath, "\", "/")

' 使用 PowerShell 将处理后的路径复制到剪贴板
On Error Resume Next ' Continue on error to handle possible clipboard issue
objShell.Run "powershell -Command Set-Clipboard '" & resultPath & "'", 0, True

4. 念念碎

  • 为什么不在注册表中直接用 cmd/Powershell 实现相关功能?

因为即使使用了 ‘-WindowStyle Hidden’ 等功能,仍然会短暂显示一个终端窗口,在 https://github.com/PowerShell/PowerShell/issues/3028 也有提出。目前该问题仍未解决,所以比较好的方法是用 vbs 文件静默启动终端。


http://www.kler.cn/a/396792.html

相关文章:

  • Rust学习(五):泛型、trait
  • springboot接口返回数据给前端,BigDecimal为null但返回前端显示-1
  • 金山云Java 开发面试题及参考答案
  • 七:如何用Chrome的Network面板分析HTTP报文
  • 鸿蒙北向开发 : hdmfs-分布式文件系统
  • LeetCode105.从前序与中序遍历构造二叉树
  • 搭建高效稳定的ChatGPT网络环境:从网络专线到IP地址管理的全流程解析
  • SQL 处理数列
  • C++中特殊类设计/单例模式
  • Javascript_设计模式(二)
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • HTML之图片和超链接的学习记录
  • 124. 二叉树中的最大路径和【 力扣(LeetCode) 】
  • go debug日记:protoc -I . helloworld.proto --go_out=plugins=grpc:.错误debug
  • 【个人笔记】如何将 Linux 文件系统扩容
  • C++__day1
  • redis7.x源码分析:(2) adlist双向链表
  • 高防服务器的费用受到哪些原因影响?
  • Java重点--多线程
  • 241114.学习日志——[CSDIY] [CS]数据结构与算法 [00]
  • C++基础 抽象类 类模板 STL库 QT环境
  • OPEN - Linux手册页
  • apipost下载安装教程、脚本详细使用教程
  • 微积分第五版课后习题答案详解PDF电子版 赵树嫄
  • leetCode——二进制手表
  • 【数据结构 | C++】字符串关键字的散列映射