Как удалить (2020_11_23 09_41_34 UTC) из имен файлов

Как удалить (2020_11_23 09_41_34 UTC) из имен файлов

Я попробовал с помощью Powershell от имени администратора выполнить команду:

Get-ChildItem -Recurse | Where-Object { $_.Name -match " ?\(\d\d\d\d_\d\d_\d\d \d\d_\d\d_\d\d UTC\)" } | Rename-Item -NewName { $_.Name -replace " ?\(\d\d\d\d_\d\d_\d\d \d\d_\d\d_\d\d UTC\)", ""}

Я получаю много ошибок:

Get-ChildItem : L'accès au chemin d'accès 'C:\Windows\system32\LogFiles\WMI\RtBackup' est refusé.
Au caractère Ligne:1 : 1
+ Get-ChildItem -Recurse | Where-Object { $_.Name -match " ?\(\d\d\d\d_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Windows\syst...es\WMI\RtBackup:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Что мне делать?

решение1

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

Никогда, никогда не делайте деструктивный код (Создание/Изменение/Обновление/Удаление/Перемещение/Переименование) без предварительной проверки результатов. Вы окажетесь в серьезном негативном положении. Поэтому во всех случаях следует использовать -WhatIf или Confirm.

Лучшая практика Powershell №8: использование WhatIf и Confirm

Rename-Item -NewName ($_.Name -replace " ?\(\d\d\d\d_\d\d_\d\d \d\d_\d\d_\d\d UTC\)", "") -WhatIf

Что касается ошибок, то вы слишком усложняете. Можно упростить до этого:

# Test create some test files
0..2 | 
ForEach-Object {New-Item -Path "D:\Temp\SomeFileName$PSItem(2020_11_23 09_41_34 UTC).txt" -WhatIf}
# Results
<#
What if: Performing the operation "Create File" on target "Destination: D:\Temp\SomeFileName0(2020_11_23 09_41_34 UTC).txt".
What if: Performing the operation "Create File" on target "Destination: D:\Temp\SomeFileName1(2020_11_23 09_41_34 UTC).txt".
What if: Performing the operation "Create File" on target "Destination: D:\Temp\SomeFileName2(2020_11_23 09_41_34 UTC).txt".
#>

# Create the test files
0..2 | 
ForEach-Object {New-Item -Path "D:\Temp\SomeFileName$PSItem(2020_11_23 09_41_34 UTC).txt"}
# Results
<#
    Directory: D:\Temp


Mode                 LastWriteTime         Length Name                                                                                                       
----                 -------------         ------ ----                                                                                                       
-a----         01-Dec-20     13:11              0 SomeFileName0(2020_11_23 09_41_34 UTC).txt                                                                 
-a----         01-Dec-20     13:11              0 SomeFileName1(2020_11_23 09_41_34 UTC).txt                                                                 
-a----         01-Dec-20     13:11              0 SomeFileName2(2020_11_23 09_41_34 UTC).txt  
#>

# Get files in path
(Get-ChildItem -Path 'D:\Temp' -Filter '*(2020_11_23 09_41_34 UTC)*').FullName
# Results
<#
D:\Temp\SomeFileName0(2020_11_23 09_41_34 UTC).txt
D:\Temp\SomeFileName1(2020_11_23 09_41_34 UTC).txt
D:\Temp\SomeFileName2(2020_11_23 09_41_34 UTC).txt
#>

# Delete the parens and all text between them
(Get-ChildItem -Path 'D:\Temp' -Filter '*(*').FullName | 
ForEach-Object {Rename-Item -Path $PSItem -NewName $($PSItem -replace '\(.*\)','') -WhatIf}
# Results
<#
What if: Performing the operation "Rename File" on target "Item: D:\Temp\SomeFileName0(2020_11_23 09_41_34 UTC).txt Destination: D:\Temp\SomeFileName0.txt".
What if: Performing the operation "Rename File" on target "Item: D:\Temp\SomeFileName1(2020_11_23 09_41_34 UTC).txt Destination: D:\Temp\SomeFileName1.txt".
What if: Performing the operation "Rename File" on target "Item: D:\Temp\SomeFileName2(2020_11_23 09_41_34 UTC).txt Destination: D:\Temp\SomeFileName2.txt".
#>

Если вам действительно нужно регулярное выражение для строки даты, то вы можете сделать это:

(Get-ChildItem -Path 'D:\Temp' -Filter '*(*').FullName | 
ForEach-Object {Rename-Item -Path $PSItem -NewName $($PSItem -replace '\(\d{4}|\d{2}.|_|UTC\)','') -WhatIf}

Удалите -WhatIf, чтобы завершить задачу и сериализовать изменение.

Связанный контент