none
Invalid path при перемещении/копировании результатов RRS feed

  • Вопрос

  • Доброго времени суток.

    Столкнулся с непонятной для меня проблемой.

    При выполнении данной строчки 

    Get-ChildItem C:\exp_base | where-Object {$_.basename -match "infrascl-" } | move-Item -Destination "c:\test"

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

    Invalid Path: 'c:\test'.
    At line:1 char:1
    + Get-ChildItem C:\exp_base | where-Object {$_.basename -match "infrascl-" } | mov ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], ArgumentException
        + FullyQualifiedErrorId : MoveItemDynamicParametersProviderException

    Папка существует, соответствующие права есть.

    Подскажите, что не так?

    16 ноября 2016 г. 10:29

Ответы

  • Get-ChildItem C:\exp_base | where-Object {$_.basename -match "infrascl-" } | Foreach {
    	move-Item -LiteralPath $_.FullName -Destination "c:\test"
    }

    И вывод ошибки приложите:

    $error[0].Exception | fl -fo *

    • Помечено в качестве ответа nskalinin 16 ноября 2016 г. 13:30
    16 ноября 2016 г. 11:45
    Отвечающий

Все ответы

  • Возможно русский символ попал. И проверьте вывод:

    Test-Path "c:\test" - должно возвращать $true

    16 ноября 2016 г. 11:12
    Отвечающий
  • Test-Path возвращает True.

    Эта часть

    Get-ChildItem C:\exp_base | where-Object {$_.basename -match "infrascl-" }

    корректно отрабатывает. Дальше ошибка.

    16 ноября 2016 г. 11:26
  • Папки в вывод попадают? Если нужны только файлы, добавить:

    where-Object {$_.basename -match "infrascl-" -and !$_.PsIsContainer}

    И покажите вывод с ошибкой:

    $error[0].Exception | fl -fo *


    • Изменено KazunEditor 16 ноября 2016 г. 11:37
    16 ноября 2016 г. 11:34
    Отвечающий
  • Внутри папки только файлы.
    16 ноября 2016 г. 11:41
  • Get-ChildItem C:\exp_base | where-Object {$_.basename -match "infrascl-" } | Foreach {
    	move-Item -LiteralPath $_.FullName -Destination "c:\test"
    }

    И вывод ошибки приложите:

    $error[0].Exception | fl -fo *

    • Помечено в качестве ответа nskalinin 16 ноября 2016 г. 13:30
    16 ноября 2016 г. 11:45
    Отвечающий
  • Вывод ошибки:

    PS SQLSERVER:\> $error[0].Exception | fl -fo *
    
    
    Message        : Invalid Path: 'c:\test'.
    ParamName      : 
    Data           : {}
    InnerException : 
    TargetSite     : Void .ctor(System.String)
    StackTrace     :    at Microsoft.SqlServer.Management.PowerShell.SqlPath..ctor(String path)
                        at Microsoft.SqlServer.Management.PowerShell.SqlServerProvider.MoveItemDynamicParameters(String path, String destination)
                        at System.Management.Automation.SessionStateInternal.MoveItemDynamicParameters(CmdletProvider providerInstance, String path, String destination, CmdletProviderContext context)
    HelpLink       : 
    Source         : Microsoft.SqlServer.Management.PSProvider
    HResult        : -2147024809

    Ваш вариант скрипта корректно отработал.

    Не подскажите в чем была моя проблема?

    16 ноября 2016 г. 11:58
  • 1 - У Вас провайдер PS SQLSERVER, попробуйте C: , должно измениться на PS С:\> и выполнить код

    2 - Если в файле есть [] символы, то требуется использовать LiteralPath.

    16 ноября 2016 г. 12:14
    Отвечающий
  • 1 - При таком варианте работает и старый код

    2 - Символов [] в названии файлов нет.

    Спасибо.

    16 ноября 2016 г. 13:29