Powershell获取windows中显示的区分大小写的路径

zbdgwd5y  于 2023-05-19  发布在  Windows
关注(0)|答案(4)|浏览(138)

我正在寻找一种方法来获得我的本地路径,其中包括名称中使用的任何驼峰式大小写。主要原因是这样我就可以使用相同的路径在windows wsl中进行调用。例如,在windows中,我可以调用一个文件

c:\FoO\bar.txt 
c:\Foo\Bar.txt

Windows将显示为c:\foo\bar.txt。当我尝试用bash输入WSL时,我需要知道实际的路径,因为Linux是区分大小写的。
我试过用

$PSScriptRoot
Split-path C:\FoO\Bar.txt
(get-Item c:\Foo\Bar.txt).FullName

但它们将仅提供调用脚本的路径。
我如何得到我的路径,因为它显示在windows操作系统?我不能只调用我需要的文件的完整路径,因为我不能保证它从根目录开始。我也不想因为一个发现而浪费时间。

6yjfywim

6yjfywim1#

您需要查看从Get-Item返回的Target属性。Fullname会返回到您最初输入的任何值,但Target实际上是一个代码属性,似乎可以获取对象的原始路径。

(get-Item c:\Foo\Bar.txt).Target
ltqd579y

ltqd579y2#

从Windows 10开始,Target属性为空。
(Get-Item '....')不包含任何包含区分大小写名称的属性。
但是,当获取文件夹的所有子项时,您将获得区分大小写的所有名称。
所以我的解决方案是这样的:

$myCaseInsensitiveFileName = 'c:\FoO\bar.txt'

$allFiles = Get-ChildItem 'c:\' -Recurse
$caseSensitiveName = $allFiles.FullName | Where-Object { $_.FullName -eq $myCaseInsensitiveFileName }

$caseSensitiveName包含C:\Foo\Bar.txt
备注:

  • 这是可以优化的,但你明白了。
  • -eq运算符比较字符串时不区分大小写
xeufq47z

xeufq47z3#

用Windows文件资源管理器找到目录,它会显示完整的路径名。
在WSL或PowerShell中找到目录,“pwd”或“echo $PWD”给出完整的路径名。
将目录添加到$HOME/.profile中的PATH,并且不需要完整的路径名。

sd2nnvve

sd2nnvve4#

我有一些自动化的方法来做到这一点。
参见http://ContextKnowledge.blog
“适用于Windows 10 + Cygwin + WSL/Ubuntu的myenv包”
该软件包包括一些简短的shell脚本
它找到信息并将其记录在环境变量中。
如果这些shell脚本不适合您,请与我联系以了解更多详细信息
我会想办法解决的

相关问题