属性Archive
およびOffline
を使用して、ファイル共有上のすべての既知のファイルのリストを生成しようとしています。
しかし、PathTooLongException
エラーが何度も発生します。
これまでのところ、同じ種類の "これらの属性のみ"の種類の結果を取得できないことを除いて、Robocopyがファイル長のエラーを超えて機能することがわかりました。
例:
Get-ChildItem -Attributes A+O -Recurse |Export-Csv E:\temp\StubSearchCorp.csv
与える:
Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. At line:1 char:1 + Get-ChildItem -Attributes A+O -Recurse |Export-Csv E:\temp\StubSearchA.Corp.cs ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ReadError: (F:\Corporate\...e A Train & Ship:String) [Get-ChildItem], PathTooLongException + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
このようなリストをCSVにエクスポートする方法を誰かが知っていますか?
Robocopyは、多くのオプションを備えたスイスアーミーナイフです。他のすべてのツールは、パスが長すぎるというエラーの影響を受けると思います。 Get-ChildItemがCSVで生成するすべてのプロパティが本当に必要ですか、それとも完全修飾ファイル名のリストのみに関心がありますか?後者の場合、これを試してください:
ROBOCOPY source dest /IA:AO /FP /NP /S /L /LOG:myfiles.txt
/ Lは、データをコピーせずにリストを作成します。
/FPには、ファイル名だけでなくフルパスが含まれています。
/NPは、ログ内の進行状況メッセージの割合を抑制します
Robocopyの使用法から「ファイル選択オプション」を参照してください:
/IA:[RASHCNETO] ::指定された属性セットのいずれかを持つファイルのみを含めます
this SO answer にPowershellベースのソリューションが見つかりました。これは、これらの恐ろしいPathTooLongException
ロギングを無視する方法を説明しています。具体的な用途は次のとおりです:
Get-ChildItem *.txt -Recurse -ErrorAction SilentlyContinue | Select-String "my pattern"
OPのシナリオでは、これは次のようになります。
Get-ChildItem -Attributes A+O -Recurse -ErrorAction SilentlyContinue | Export-Csv "rslt.csv"
主な欠点の1つ:これは、PowerShellの好み(コマンドが約束するとおり)のために「長すぎる」と見なされるすべてのパスを静かに無視します。ただし、私自身のケースでは、node_modules
フォルダーに関するこれらのエラーを抑制するように言っています。他にも同じ問題で上陸する可能性があるため、ここで共有することにしました...