4

あるディスクの内容を別のディスクにコピーするためにpowershellコマンドを使用しようとしましたcopy-itemxcopy

copy-item -Path h:\* -Destination g:\ -Recurse -Force

ただし、次のエラーが発生しました。

Copy-Item : 指定されたパス、ファイル名、またはその両方が長すぎます。完全修飾ファイル名は 260 文字未満、ディレクトリ名は 248 文字未満である必要があります。

長いパスを持つファイルやフォルダーを手動で検索してコピーするのを思いとどまらせるのに十分なこれらのエラーが発生しました。この問題を回避する最善の方法は何ですか?

4

2 に答える 2

6

私の知る限り、robocopyこれは自動的に処理されます (少なくとも、長いパスのサポートを明示的に無効にする必要があります)。だからあなたは使うことができます

robocopy h:\ g:\ /E

純粋な PowerShell ソリューションではなく、ネイティブ コマンドにあまり反対でない場合。

通常、パスの先頭に追加\\?\して、最大 32k 文字のパスを処理できるようにすることができますが、.NET ではこれが役に立たない可能性があります。

于 2012-04-19T09:02:40.463 に答える
5

Codeplexで、Microsoftは実験的なロングパスラッパーをホストします。これは、System.IO名前空間の現在の259文字の制限よりも長いパスを簡単に操作できるようにする機能を提供します。

Powershellでこのラッパーを使用してファイルをコピーする方法の例:

[reflection.assembly]::loadfile("C:\Users\stackoverflow\Desktop\Microsoft.Experimental.IO.dll")
[microsoft.experimental.io.longpathfile]::Copy((gi .\myversion.txt).fullname, "C:\users\stackoverflow\desktop\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",$true)

他のサンプルはここにあります。

于 2012-04-19T11:36:12.607 に答える