2015-04-04 56 views
2

Windows对路径的限制为260个字符。我已经吹过了它,而且它正在加剧。我想找一些方法绕过这一点。

到目前为止,我已经写在PowerShell中的脚本,将得到我的PATH变量,分析它,然后设置与Windows shortpath内的所有字符串表示的路径的想法。

这是我到目前为止有:

Function Get-ShortName 
{ 
    BEGIN { $fso = New-Object -ComObject Scripting.FileSystemObject } 
    PROCESS 
    { 
     If ($_.psiscontainer) 
      {$fso.getfolder($_.fullname).ShortName} 
     ELSE 
      {$fso.getfile($_.fullname).ShortName} 
    } 
} 

function Get-ShortPath { 
    begin { $fso = New-Object -ComObject Scripting.FileSystemObject } 
    process { 
     if ($_.psiscontainer) 
      {$fso.getfolder($_.fullname).shortpath} 
     else 
      {$fso.getfile($_.fullname).shortpath} 
    } 
} 

我是一个总的初学者到PowerShell的,现在我难倒如何解析分号分隔列表$ ENV:路径收益和转那成为我可以传递给我的Get-ShortPath函数的东西。有什么建议么?

+2

这是不正确的,因为路径环境变量被限制为260个字符(见[什么是一个环境变量的最大长度?](http://blogs.msdn.com/b/oldnewthing/archive/2010/02 /03/9957320.aspx))。 – 2015-04-04 16:52:56

+1

嗯。我正在安装CMake,安装程序向我抱怨说它无法将自己添加到我的路径中。其他程序也抱怨说,他们无法附加到我的用户路径。当我查找原因时,他们都指出我的PATH环境变量太长。你是否知道这可能会发生其他原因? – krapht 2015-04-05 00:46:20

+0

首先搜索确切的错误消息总是有帮助的。 – 2015-04-05 13:05:57

回答

2

正如你已经指出的,$env:PATH的值是一个分号分隔的列表。

要拆分它,使用-split operator

$Paths = $env:PATH -split ";" 

因为我们还没有宣布在功能的任何命名或位置参数,你就必须管串对他们说:

@($env:PATH -split ";") | Get-ShortName 
+0

@Bill_Stewart绝对正确,我的错误 – 2015-04-05 16:15:54