当path \ filename超过260个字符时,在PowerShell中获取/设置文件属性

时间:2013-12-17 18:02:47

标签: .net powershell robocopy

我正在寻找一种在PowerShell中获取和设置文件属性(隐藏和只读)的方法,用于组合路径和文件名超过260个字符的文件。我知道.NET类不支持更长的文件路径;我已经尝试过了。 Attrib也不起作用。我收到错误“参数格式不正确 - ”。同样,Dir也不起作用。

我正在使用Robocopy来获取文件名。 Robocopy对长路径没有任何问题。但是,我不能使用Robocopy获取/设置属性,因为我只使用Robocopy的/ L列表模式。

任何人都有PowerShell的解决方法吗?

更新

subst不支持超长路径。它似乎确实适用于部分路径。

mklink需要本地卷。

net use不支持超长路径。它似乎确实适用于部分路径。

New-PSDrive不支持超长路径,甚至不支持部分路径。

2 个答案:

答案 0 :(得分:1)

我猜使用subst命令来映射路径,因为驱动器号值得一试。它基于DOS的旧时代,仍然适用于Winndows,如此,

subst k: c:\some\really\complex\path\with\too\many\subdirs\and\suff\...

如果subst不起作用,请尝试共享文件附近的目录并通过UNC路径访问它。

答案 1 :(得分:0)

基于vonPryz的答案以及您使用部分路径的想法,以下工作虽然很慢并且需要错误抑制:

subst m: 'Insert\a\complete\path\close\to\character\limit'
sleep 1
Push-Location 'm:\rest\of\path\to\the\file' -ErrorAction SilentlyContinue
Get-ChildItem | %{
attrib $_
}
subst m: /d
sleep 1

这个答案也使用SUBST接近我们想要的位置;然后,Push-Location将长文件名的父目录设置为“当前工作目录”see here。 Push-Location抱怨它,但无论如何它仍然有用,因为Get-ChildItem和ATTRIB似乎可以使用这个'当前工作目录',而不是解析整个路径,因此,ATTRIB工作。