Ошибка в скрипте powershell - PullRequest
       4

Ошибка в скрипте powershell

2 голосов
/ 09 декабря 2010

У меня есть сценарий powershell (ниже), который, кажется, работает, но при каждом запуске выдает ошибку, которая, как мне кажется, может повлиять на его производительность Почему я получаю эту ошибку?

Ошибка:

Move-Item : Cannot find path 'C:\Program Files (x86)\mailserver\mail\domain.com\user\inbox\201012090411577967.imap' because it does not exist.

At C:\scripts\findfiles.ps1:27 char:21
+ $list | foreach { mv <<<<  $_.Path $newdir }
    + CategoryInfo          : ObjectNotFound: (C:\Program File...0411577967.imap:String) [Move-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand

Скрипт powershell:

# Prompt the user for a start directory
$startdir=Read-Host "Enter a directory to search (without trailing slash)"

# Define a variable for the new directory
$newdir="$startdir\temp"

# Make the temp directory
if (!(Test-Path -path $newdir))
{
  New-Item $newdir -type directory
}

# Tell them we will write to the start director\temp
write-host "Files will be moved to $newdir"

# Prompt to a pattern to search for
$pattern=Read-Host "Enter a pattern to search for"

# Tell the user we are doing something
write-host "Searching $startdir for `"$pattern`" then moving. Please wait...."

# Generate a list of files containing a pattern
$list = gci $startdir\* -include "*.imap" -recurse | select-string -pattern $pattern


# Move files matching the pattern to temp
$list | foreach { mv $_.Path $newdir }

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Select-String может найти более одного совпадения в файле. Я подозреваю, что он находит больше совпадений в том же файле, но вы уже переместили файл, поэтому источник больше не существует. Используйте параметр -List в строке выбора, чтобы получить только одно совпадение для файла.

$list = gci $startdir -r *.imap | select-string $pattern -List
0 голосов
/ 09 декабря 2010

Попробуйте изменить строку, генерирующую список $, на что-то вроде этого:

$list = gci $startdir* -include "*.imap" -recurse | where { select-string -Path $_ -Pattern $pattern -Quiet }

Возможно, вы также захотите изменить последнюю строку на:

$list | mv $newdir
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...