19

ファイル名の特殊文字を削除した後、すべてのメールをファイル名に基づいた宛先に移動しようとしています。FOLDLISTは配列であり、条件変数と宛先フォルダー名があります。

    Set-Location 'C:\Users\abrahame\Desktop\Work\PSG Mail Movement\Mail'
    $DESLOC="c:\Temp\ua-closed bugs"
    $FOLDLIST = @(("UA", "CLOSE",  "ua-closed bugs"), ("VS", "CLOSE", "vs-closed-bugs"), ("CM", "CLOSED", "cm - closed-bugs"))
    gci | Foreach-object { $NEWN = $_.Name -replace '&',' ' -replace '_', ' ' -replace '#', ' ' -replace '!', ' '  -replace '@', ' '  -replace '$', ' '  -replace '%', ' '  -replace '^', ' '  -replace '&', ' '  -replace '\(', ' ' -replace '\)', ' '  -replace '\[', ' ' -replace '\]', ' ' -replace '\{', ' '  -replace '\}', ' ' -replace '\-', ' ';
            write-host $NEWN.Length
            if($NEWN.Length -gt  70){
                    $NEWN="$NEWN.Substring(1,70)"
                    $NEWN=$NEWN.msg


            }

            $FOLDLIST | ForEach-Object {
            $CXR=$_[0]
            $STAT=$_[1]

            if ($NEWN -match ("$CXR") -and $NEWN -match ("$STAT")){
            write-host $CXR -  $STAT
                    $DIR=$_[2]
                    $NEWN=$NEWN.trim()
                    $DPATH="$DESLOC\$DIR\$NEWN"
                    write-host $DPATH
                    mv $_.Name $DPATH
            }
            }

    }

このエラーが発生します。どこで間違えたのか教えてください。

    67
    UA - CLOSE
    c:\Temp\ua-closed bugs\ua-closed bugs\RE  CLOSE OA TICKET   10350   OA   UAT PHASE FOR HP FARES  1 .msg
    Move-Item : Cannot bind argument to parameter 'Path' because it is null.
    At C:\Users\abrahame\Desktop\Work\PSG Mail Movement\mailmove_multdimentional.ps1:24 char:5
    +         mv <<<<  $_.Name $DPATH
        + CategoryInfo          : InvalidData: (:) [Move-Item], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCom
       mand
4

3 に答える 3

7

私の推測では、 $_.Name は存在しません。

私があなただったら、スクリプトを ISE に持ち込み、そこに到達するまで 1 行ずつ実行してから、$_ の値を確認します。

于 2012-10-01T13:52:37.193 に答える
3

$_現在のパイプラインでアクティブなオブジェクトです。で新しいパイプラインを開始した$FOLDLIST | ...ので$_、パイプラインに渡されるその配列内のオブジェクトを表します。変数の最初のパイプラインから FileInfo オブジェクトを隠しておき、後でその変数を参照する必要があります。

write-host $NEWN.Length
$file = $_
...
Move-Item $file.Name $DPATH
于 2012-10-01T13:47:04.093 に答える
-4
  1. PM>Uninstall-Package EntityFramework -Force
  2. PM>Iinstall-Package EntityFramework -Pre -Version 6.0.0

NugetPackageConsole. のこのコードでこの問題を解決します。問題はバージョンにありました。私はそれが他の人を助けると思います。

于 2019-09-29T06:36:00.697 に答える