Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   удаление файлов со сложным наименованием и с кучей "служебных" символов (http://forum.oszone.net/showthread.php?t=343130)

God-of-Chaos 01-12-2019 07:28 2898667

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

пример
"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 01-12-2019 08:11 2898668

Цитата:

Цитата God-of-Chaos
Remove-item не удаляет. »

У командлета есть параметр -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")) - выдает ерунду »

Код:

[management.automation.wildcardpattern]::escape("стро[к]а")

Iska 01-12-2019 11:58 2898679

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

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

Busla 01-12-2019 12:59 2898691

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" »

длинные пути (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")) - выдает ерунду »

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

Цитата:

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

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

Цитата:

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

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


Время: 01:02.

Время: 01:02.
© OSzone.net 2001-