我正在寻找一种在PowerShell中获取和设置文件属性(隐藏和只读)的方法,用于组合路径和文件名超过260个字符的文件。我知道.NET类不支持更长的文件路径;我已经尝试过了。 Attrib也不起作用。我收到错误“参数格式不正确 - ”。同样,Dir也不起作用。
我正在使用Robocopy来获取文件名。 Robocopy对长路径没有任何问题。但是,我不能使用Robocopy获取/设置属性,因为我只使用Robocopy的/ L列表模式。
任何人都有PowerShell的解决方法吗?
更新:
subst
不支持超长路径。它似乎确实适用于部分路径。
mklink
需要本地卷。
net use
不支持超长路径。它似乎确实适用于部分路径。
New-PSDrive
不支持超长路径,甚至不支持部分路径。
答案 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工作。