Move-Item с параметром -Include выдает ошибку «элемент не существует» - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующие файлы:

> dir ~
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a----        26-Oct-18   5:30 PM        2   xxx1
-a----        26-Oct-18   5:30 PM        2   xxx2
-a----        26-Oct-18   5:30 PM        2   xxx3
-a----        26-Oct-18   5:31 PM        2   yyy1
-a----        26-Oct-18   5:31 PM        2   yyy2
-a----        26-Oct-18   5:31 PM        2   yyy3
-a----        26-Oct-18   5:33 PM        2   zzz

Я хочу переместить xxx * и yyy * файлы в другую папку.Поэтому я делаю:

Move-Item -Path ~\* -Include "xxx*", "yyy*" -Destination D:\temp

И получаю ошибку:

Move-Item : Cannot move item because the item at '~\zzz' does not exist.

Но файл есть и Test-Path ~ \ zzz возвращает true.

Это ошибка в Move-Item командлет или ожидаемое поведение?Если это ожидается, почему я получаю это?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Да, это немного сбивает с толку, но если вы читаете весь текст справки, то, что вы пытаетесь сделать, Move-Item предшествует Get-ChildItem в конвейере, и да, это действительно показывает -include, ноэто находится на стороне Get-ChildItem (левая сторона) конвейера.

Итак, опять же, в качестве лучшей практики, то, что говорит Разорфен, это только спрашивать о том, что вам нужно / нужно.Всегда выполняйте неразрушающую / действенную проверку работоспособности (то есть, чтобы Get-ChildItem показывался в тексте файла справки), чтобы убедиться, что вы получаете то, что ожидаете, прежде чем делать подобные разрушительные действия.

Тот факт, что вы передаете список таким образом, даже если вы сделали это, используя только расширение, произойдет та же ошибка.

Move-Item -Path 'D:\FileSource\*' -Include '*.txt' -Destination 'D:\FileDestination' -Verbose -WhatIf

# Results

What if: Performing the operation "Move File" on target "Item: D:\FileSource\DataSet.txt Destination: D:\FileDestination\DataSet.txt".
What if: Performing the operation "Move File" on target "Item: D:\FileSource\input.txt Destination: D:\FileDestination\input.txt".
Move-Item : Cannot move item because the item at 'D:\FileSource\processesoutput.csv' does not exist.
At line:1 char:1
+ Move-Item -Path 'D:\FileSource\*' -Include '*.txt' -Destination 'D:\F ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

Итак, полная квалификация запроса для работы.

Get-ChildItem -Path 'D:\FileSource\*' | Move-Item -Include '*.txt' -Destination 'D:\FileDestination' -Verbose -WhatIf

What if: Performing the operation "Move File" on target "Item: D:\FileSource\DataSet.txt Destination: D:\FileDestination\DataSet.txt".
What if: Performing the operation "Move File" on target "Item: D:\FileSource\input.txt Destination: D:\FileDestination\input.txt".
What if: Performing the operation "Move File" on target "Item: D:\FileSource\processesoutput.csv Destination: D:\FileDestination\processesoutput.csv".
0 голосов
/ 26 октября 2018

Вам не нужно -Include. Просто передайте шаблонные аргументы, например,

$tmp = "D:\temp"
Move-Item "yyy*", "xxx*" -Destination "$tmp"

В приведенном выше примере предполагается, что ваша PowerShell находится в каталоге, в котором находятся файлы "xxx" и "yyy" - в противном случае вам нужно написать путь перед подстановочными знаками

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