powershell

Getting Cannot bind argument to parameter 'Path', because it is null error in PowerShell


I'm trying to move all the mails after removing the special characters in the filename to some destination based on the filename.

FOLDLIST is an array, where I'm having the condition variable and destination foldername.

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
        }
    }
}

I'm getting this error. Where did I make a mistake?

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

Solution

  • My guess is that $_.Name does not exist.

    If I were you, I'd bring the script into the ISE and run it line for line till you get there then take a look at the value of $_.