none
Powershell Удаление папок с пробелом в конце имени RRS feed

  • Вопрос

  • Добрый день.

    Для удаления "проблемной" папки, в конце имени, которой стоит пробел в командном файле используют UNC путь.

    rmdir "\\?\c:\путь_к_файлу_или_папке_с_пробелом_в_конце_имени "

    При попытке использовать UNC путь для Remote-Item в Powershell возникает ошибка

    $Folder = '\\?\C:\test '

    Remove-Item $Folder -Force -Recurse

    + Remove-Item <<<<  $Folder -Recurse -Force
        + CategoryInfo          : InvalidArgument: (:) [Remove-Item], ParameterBindingException
        + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.RemoveItemCommand

    Как на Powershell удалить папку с пробелом в конце?

Ответы

  • раз уж внутренняя команда del командной строки поддерживает UNC пути, то можно действовать через нее

    dir -Filter *..*| %{cmd /c del "\\?\$($_.FullName)"}

    Но ради каждого файла звать новый экземпляр cmd - не очень эффективно.

    Лучше будет подготовить список фалов в UNC-формате, подлежащих удалению, а потом скормить его батнику, который удалит их при помощи команды del.


    my blog: http://shserg.ru/

    • Помечено в качестве ответа KazunEditor 14 июля 2016 г. 8:35
    11 июля 2016 г. 13:06
  • $Folder = '\\localhost\C$\test '
    Remove-Item $Folder -Force -Recurse 
    


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа KazunEditor 14 июля 2016 г. 8:35
    Модератор

Все ответы

  • $Folder = '\\localhost\C$\test '
    Remove-Item $Folder -Force -Recurse 
    


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа KazunEditor 14 июля 2016 г. 8:35
    Модератор
  • Спасибо, это работает.

    Но теперь вторая проблема - не удаляются вложенные папки с именем с точкой на конце.

    c:\test\test.

    Remove-Item : Не удалось найти часть пути "\\localhost\c$\test\test".
    + rmdir <<<<  \\localhost\c$\test -recurse -force
        + CategoryInfo          : WriteError: (\\localhost\c$\test:String) [Remove-Item], DirectoryNotFoundException
        + FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.
       RemoveItemCommand

  • Создать такую топологию файлов и папок проблемно так как в проводнике спец символы проглатываются, тоже самое происходит и в поше, если у вас нечно генерирует такую топологию возможно есть смысл использовать нечто на подобии robocopy

    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • Папка расшарена для Linux и Windows машин в учебном заведении.

    Студенты Linux машин с легкостью создают подобные папки с пробелами и точками в конце имени.

    Вы предлагаете с помощью robocopy создать на старом месте пустое зеркало?


    UPD Да, если создать такую же пустую иерархию папок, то с помощью robocopy в режиме MIR все удаляется без ошибок. Спасибо.
    • Изменено UDN Denis 5 июля 2016 г. 8:30
  • думаю есть резон попробовать нечто на подобии 
    /MOV :: MOVe files (delete from source after copying).
    /MOVE :: MOVE files AND dirs (delete from source after copying).


    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • раз уж внутренняя команда del командной строки поддерживает UNC пути, то можно действовать через нее

    dir -Filter *..*| %{cmd /c del "\\?\$($_.FullName)"}

    Но ради каждого файла звать новый экземпляр cmd - не очень эффективно.

    Лучше будет подготовить список фалов в UNC-формате, подлежащих удалению, а потом скормить его батнику, который удалит их при помощи команды del.


    my blog: http://shserg.ru/

    • Помечено в качестве ответа KazunEditor 14 июля 2016 г. 8:35
    11 июля 2016 г. 13:06