2012-10-01 28 views
11

Tôi đang cố di chuyển tất cả thư sau khi xóa các ký tự đặc biệt trong tên tệp thành một số đích dựa trên tên tệp. FOLDLIST là một mảng, trong đó tôi có biến điều kiện và tên người dùng đích.Bắt Không thể liên kết đối số với tham số 'Đường dẫn' vì nó là lỗi null trong powershell

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

    } 

Tôi gặp phải lỗi này. Vui lòng cho biết nơi tôi đã nhầm lẫn ..

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 

Trả lời

2

Tôi đoán là $ _. Tên không tồn tại.

Nếu tôi là bạn, tôi sẽ đưa kịch bản vào ISE và chạy nó cho đến khi bạn đến đó, hãy xem giá trị $ _

+0

vâng .. Bạn đang sửa chữa..Được giải quyết. Cảm ơn nhiều.. – Tamilan

3

$_ là đối tượng đang hoạt động trong đường ống hiện tại. Bạn đã bắt đầu một đường ống mới với $FOLDLIST | ... vì vậy $_ đại diện cho các đối tượng trong mảng đó được chuyển xuống đường ống. Bạn nên stash đối tượng FileInfo từ đường ống đầu tiên trong một biến và sau đó tham chiếu biến đó sau đó, ví dụ:

write-host $NEWN.Length 
$file = $_ 
... 
Move-Item $file.Name $DPATH 
+0

Keith, tôi cũng làm như bạn đã khuyên. \t $ CXR = $ _ [0] \t $ STAT = $ _ [1] và $ DIR = $ _ [2]. Tôi đang lấy thông tin và lưu trữ trong các biến này và sử dụng nó .. – Tamilan

+0

Cảm ơn bạn Rất nhiều .. Đó là vì đầu tiên cho vòng lặp. Bạn đúng rồi. – Tamilan

Các vấn đề liên quan