none
Remove-Item и файл с квадратной скобкой в имени RRS feed

  • Вопрос

  • Приветствую уважаемый форум!

    Прошу подсказать.

    Есть скрипт, который чистит директории от файлов старше N дней.

    В директории появились файлы с именем вида [без имени]_XXXXXXX.pdf

    Они игнорируются командой скрипта

    $files = Get-ChildItem $path -Recurse -File -Exclude $Exclude | Where{$_.LastWriteTime -le "$LastWrite"}
    
     foreach ($ff in $files) {
     Remove-Item -Path $ff -WhatIf
     }
    

    По остальным отрабатывает нормально

    Пожалуйста, подскажите, как и эти файлы тоже удалять?

    2 апреля 2018 г. 14:57

Ответы

  • У вас стоит в скрипте LastWriteTime, может лучше стоит использовать CreationTime?

    У меня вот такой скрипт отрабатывает без проблем:

    Get-ChildItem C:\1234\ -File | ? {$_.CreationTime -le (Get-Date).AddDays(-2)} | Remove-Item -Force -Recurse

    А вообще лучше всего выполнить отдельно команду Get-ChildItem и посмотреть попадают ли в этот список нужные вам файлы.
    • Изменено Sergey Ya 2 апреля 2018 г. 15:13
    • Помечено в качестве ответа KazunEditor 3 апреля 2018 г. 6:39
    2 апреля 2018 г. 15:10
  • Так в чем проблема заменить -Path на -LiteralPath?

    Remove-Item -LiteralPath $ff.FullName -Force

    • Изменено KazunEditor 2 апреля 2018 г. 19:20
    • Помечено в качестве ответа Reanimator73 3 апреля 2018 г. 6:22
    2 апреля 2018 г. 19:20
    Отвечающий

Все ответы

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

    Попробуйте вот так:

    $files = Get-ChildItem $path -Recurse -File -Exclude $Exclude | Where{$_.LastWriteTime -le "$LastWrite"}
    
    foreach ($ff in $files) {
        Remove-Item -Path $ff -WhatIf -Force -Recurse
    }

    2 апреля 2018 г. 15:03
  • Увы, ничего не изменилось
    2 апреля 2018 г. 15:08
  • У вас стоит в скрипте LastWriteTime, может лучше стоит использовать CreationTime?

    У меня вот такой скрипт отрабатывает без проблем:

    Get-ChildItem C:\1234\ -File | ? {$_.CreationTime -le (Get-Date).AddDays(-2)} | Remove-Item -Force -Recurse

    А вообще лучше всего выполнить отдельно команду Get-ChildItem и посмотреть попадают ли в этот список нужные вам файлы.
    • Изменено Sergey Ya 2 апреля 2018 г. 15:13
    • Помечено в качестве ответа KazunEditor 3 апреля 2018 г. 6:39
    2 апреля 2018 г. 15:10
  • У вас стоит в скрипте LastWriteTime, может лучше стоит использовать CreationTime?


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

    И потом, даже если отбирать их по другому критерию, как это повлияет на возможность удалить файл с квадратной скобкой в названии?

    2 апреля 2018 г. 15:14
  • У вас стоит в скрипте LastWriteTime, может лучше стоит использовать CreationTime?


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

    И потом, даже если отбирать их по другому критерию, как это повлияет на возможность удалить файл с квадратной скобкой в названии?

    А причем тут квадратные скобки?

    У меня прекрасно удаляются файлы с названиями [без имени]_1234567.pdf , [без имени]_XXXXXXX.pdf

    Еще раз - Выполните отдельно команду Get-ChildItem и уже по выводу этой команды проверяйте почему нужные вам файлы не попали в этот список

    2 апреля 2018 г. 15:20
  • вот такой кусок кода

    $files = Get-ChildItem $path -Recurse -File -Exclude $Exclude | Where{$_.LastWriteTime -le "$LastWrite"}
    
     foreach ($ff in $files) {
     Write-Host $ff
     Remove-Item -Path $ff -WhatIf -Force -Recurse
     # WriteLog $LogFile ('Delete file: ' + $ff.FullName)
     }

    вывод такой:

    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\7222168_2017112810354500.pdf
    What if: Performing the operation "Remove File" on target "\\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\7222168_2017112810354500.pdf".
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\8067493_2017112810253400.pdf
    What if: Performing the operation "Remove File" on target "\\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\8067493_2017112810253400.pdf".
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112308360700.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112309293700.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112309295200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112311040800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112317033500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112317034500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112317215000.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112410595100.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112410595900.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112411182800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112411185400.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112411381400.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112411382400.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112414295800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112417270200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112417274000.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112417284600.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112710213300.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112710410200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112710411500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112711235200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112711240500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112712153100.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112714583600.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112715033400.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112715051200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112808462600.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112811462900.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112811470500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112811474300.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112812245500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112813204800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112813211700.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112815384400.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112909582000.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112910104200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112910453800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112910463000.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112912500600.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017112913501000.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017113009000800.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017113013211200.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\[без имени]_2017113016444500.pdf
    \\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\Служебная записка.pdf
    What if: Performing the operation "Remove File" on target "\\domain\all\DFS_SHARES\SCAN\OFFICE_SCAN\Служебная записка.pdf".

    я правильно понимаю, что файлы в массив попадают, но, почему-то игнорируются командой Remove-Item

    2 апреля 2018 г. 16:00
  • Вот так все работает исправно:

    foreach ($ff in $files) {
        $ff | Remove-Item -Force -Recurse
    }

    А у вас раньше работал этот скрипт? 

    Дело в том, что в переменную $ff попадает объект, а -Path должен быть типа [string] 

    2 апреля 2018 г. 16:26
  • [] - воспринимаются, как подстановные знаки, поэтому если не использовать конвейер, то указать -LiteralPath.

    PS > Remove-Item 1[123]1.txt -Verbose
    PS > Remove-Item -LiteralPath 1[123]1.txt -Verbose
    VERBOSE: Performing the operation "Remove File" on target "D:\1[123]1.txt".


    • Изменено KazunEditor 2 апреля 2018 г. 18:18
    2 апреля 2018 г. 18:14
    Отвечающий
  • Как видно, скрипт отрабатывает на обычных файлах, и не отрабатывает на файлах, содержащих квадратную скобку в имени (возможно, причина не в наличии квадратной скобки, а в чем-то еще)

    перенес файлы в локальную директорию, поставил максимальные права для Everyone

    даже явно указал тип переменной для полного пути к файлу. И все равно не отрабатывает

     foreach ($ff in $files) {
     [string]$var = $ff.FullName
     write-host $var
     Write-Host "Type: "  $var.GetType().FullName
     Remove-Item -Path $var -WhatIf -Force
     }

    вывод такой:

    I:\temp\7222168_2017112810354500.pdf
    Type:  System.String
    What if: Performing the operation "Remove File" on target "I:\temp\7222168_2017112810354500.pdf".
    I:\temp\8067493_2017112810253400.pdf
    Type:  System.String
    What if: Performing the operation "Remove File" on target "I:\temp\8067493_2017112810253400.pdf".
    I:\temp\[без имени]_2017112308360700.pdf
    Type:  System.String
    I:\temp\[без имени]_2017112309293700.pdf
    Type:  System.String
    I:\temp\[без имени]_2017112317033500.pdf
    Type:  System.String
    I:\temp\[без имени]_2017112317034500.pdf
    Type:  System.String 
    

    Дополнение:

    если любой файл, который раньше успешно удалялся этим кодом, переименовать, добавив вначале [без имени], то он тоже игнорируется командой Remove-Item

    • Изменено Reanimator73 2 апреля 2018 г. 19:05 Дополнение
    2 апреля 2018 г. 18:50
  • Так в чем проблема заменить -Path на -LiteralPath?

    Remove-Item -LiteralPath $ff.FullName -Force

    • Изменено KazunEditor 2 апреля 2018 г. 19:20
    • Помечено в качестве ответа Reanimator73 3 апреля 2018 г. 6:22
    2 апреля 2018 г. 19:20
    Отвечающий
  • Так в чем проблема заменить -Path на -LiteralPath?

    Remove-Item -LiteralPath $ff.FullName -Force

    мешало не знание :-) Спасибо, работает!
    • Изменено Reanimator73 3 апреля 2018 г. 6:23
    3 апреля 2018 г. 6:23