2017-05-31 9 views
0

私のルートフォルダ内のサブディレクトリのみのレポートを取得しようとしています。私はこれをしようとすると2つのエラーが表示されます。RoboCopyディレクトリサイジングPowerShell

You cannot call a method on a null-valued expression. 
At line:5 char:1 
+ $fldSize = (robocopy $DIR "NO" /e /l /r:0 /w:0 /nfl /ndl /nc /fp /np ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Method invocation failed because [System.IO.DirectoryInfo] does not contain a method named 'op_Addition'. 
At line:6 char:1 
+ $DIR + " = " + "{0:N2}" -f ($fldSize/1MB) + " MB" 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (op_Addition:String) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

私は見てのビットを行って、そして私が発見したことは、アレイの問題を示すように見える、しかし、私がこれまで試してみました、何も任意の異なる結果が得られなかったしました。スクリプトは以下の通りです。

function get_dir ($SDIR){ 
$colItems = Get-ChildItem $SDIR -Directory 
foreach ($DIR in $colItems) 
{ 
$fldSize = (robocopy $DIR "NO" /e /l /r:0 /w:0 /nfl /ndl /nc /fp /np /njh /xj /bytes| ? {$_ -match "Bytes :"}).trim().split(" ")[2] 
$DIR + " = " + "{0:N2}" -f ($fldSize/1MB) + " MB" 
} 
} 


get_dir C:\TEST\ 

答えて

0

問題は、$colitemsの各要素はタイプDirectoryInfoであり、あなたはrobocopyをした後に、コードの行にそうであるように、あなたの結果を作成するための文字列として扱うことができないよう$DIR.fullnameを使用する必要があるということです。ここで

は固定されたバージョンでは、迅速な対応のための

function get_dir ($SDIR) 
{ 
    $colItems = Get-ChildItem $SDIR -Directory 
    foreach ($DIR in $colItems) 
    { 
     $fldSize = (robocopy $DIR.fullname "NO" /e /l /r:0 /w:0 /nfl /ndl /nc /fp /np /njh /xj /bytes| ? {$_ -match "Bytes :"}).trim().split(" ")[2] 
     $DIR.fullname + " = " + ("{0:N2}" -f ($fldSize/1MB) + " MB") 
    } 
} 
+0

おかげです。私は何かが不足していることを知っていました。あなたの説明は、私が欠けていたものがなぜ必要なのかを理解するだけでなく、 – GreatMagusKyros

関連する問題