PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов

Ответить
Аватара пользователя
God-of-Chaos

PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов

Сообщение God-of-Chaos »

Каким образом удалять сложноименованные файлы находящимися по длинным путям...



пример

"C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track"

"C:\Users\test\AppData\Local\Microsoft\Feeds Cache\GWBZ7T1R\ieonline.microsoft[1].microsoft[1]"





Remove-item не удаляет.

Convert-path выдает пустое значение

$([regex]::Escape("C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track")) - выдает ерундуИзображение

получилось удалить только через [poshfile]::DeleteFile("C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track")



как путь можно преобразовать в читаемый для командлета remove-item? так как требуется возврат ошибки в случае проблем с удалением...



а вообще есть необходимость удалить папку профиля пользователя (например c:\users\test) со всем содержимым и включая саму папку
Аватара пользователя
YuS_2

Re: PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов

Сообщение YuS_2 »

Цитата God-of-Chaos:



Remove-item не удаляет.
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов




У командлета есть параметр -LiteralPath, вместо -Path




Цитата God-of-Chaos:



$([regex]::Escape("C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track")) - выдает ерунду
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов






Код:

Код: Выделить всё

[management.automation.wildcardpattern]::escape("стро[к]а")
Аватара пользователя
Iska

Re: PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов

Сообщение Iska »

God-of-Chaos, он их не удаляет только из-за наличия квадратных скобок. Увы, это особенность всех языков, рассматривающих строки изначально не как чистые литералы.



Ещё на тему от Василия Гусева:
Квадратные скобки в именах файлов | PowerShell и другие скрипты
.
Аватара пользователя
Busla

Re: PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов

Сообщение Busla »

God-of-Chaos,
Remove-Item вообще криво реализован
:


Цитата:



Because the Recurse parameter in Remove-Item has a known issue, the command in this example uses Get-ChildItem to get the desired files, and then uses the pipeline operator to pass them to Remove-Item.




Цитата God-of-Chaos:



находящимися по длинным путям...

пример

"C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track"
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов




длинные пути (Long Paths) - вполне конкретный термин, и он про пути длиннее 260 символов - и да, на них ваш скрипт тоже спотыкнётся, когда они встретятся




Цитата God-of-Chaos:



$([regex]::Escape("C:\users\test\GRAPHISOFT\ARCHICAD-64 Папка Журнала\ARCHICAD-64 20.0.0 RUS R1\UsageLogger\Tracker\UsageLogSenderTool[1546929321][9488].track")) - выдает ерунду
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов




Выдаёт он нормальный результат. Непонятно, зачем вы это делаете.




Цитата Iska:



он их не удаляет только из-за наличия квадратных скобок. Увы, это особенность всех языков, рассматривающих строки изначально не как чистые литералы.
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов




со строками в PoSh всё ok. Как верно заметил YuS_2, дело в неправильном использовании параметров




Цитата God-of-Chaos:



а вообще есть необходимость удалить папку профиля пользователя (например c:\users\test) со всем содержимым и включая саму папку
PowerShell - удаление файлов со сложным наименованием и с кучей "служебных" символов




вам будет гораздо проще использовать rmdir из cmd
Ответить

Вернуться в «Скриптовые языки администрирования Windows»