2012-10-01 8 views
11

Próbuję przenieść wszystkie wiadomości e-mail po usunięciu znaków specjalnych w nazwie pliku do miejsca docelowego na podstawie nazwy pliku. FOLDLIST to tablica, w której mam zmienną warunkową i docelową nazwę folderu.Uzyskiwanie Nie można powiązać argumentu z parametrem "Ścieżka", ponieważ jest to błąd zerowy w powłoce administratora

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

    } 

Otrzymuję ten błąd. Proszę doradzić gdzie zrobiłem błąd ..

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 

Odpowiedz

2

Domyślam się, że $ _. Nazwa nie istnieje.

Gdybym był tobą, to bym przynieść scenariusz do ISE i uruchomienia go linia do linii aż dojdziesz tam wtedy spojrzeć na wartości $ _

+0

tak .. Masz rację ... Problem został rozwiązany. Dziękuję Ci bardzo.. – Tamilan

3

$_ jest aktywny obiekt w bieżącym rurociągu. Rozpocząłeś nowy potok z $FOLDLIST | ..., więc $_ reprezentuje obiekty w tej tablicy, które są przekazywane w dół potoku. Należy schować obiektu FileInfo od pierwszego rurociągu w zmiennej i następnie odwołać tej zmiennej później np .:

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

Keith, robię tak samo jak poradziłeś. \t $ CXR = $ _ [0] \t $ STAT = $ _ [1] i $ DIR = $ _ [2]. Biorę informacje i przechowuję te zmienne i używając tego .. – Tamilan

+0

Dziękuję bardzo .. To z powodu pierwszej pętli for. Masz rację. – Tamilan

Powiązane problemy