Я пытаюсь написать небольшой скрипт PowerShell для очистки имен файлов из некоторых дампов журналов, но мне кажется, что я застрял ... У меня есть журналы, выгруженные из разных источников, и имена файлов, похоже, искажены.
Я ищу имена файлов, например, так ... "Source - Service.log"
Get-ChildItem *.* -Path ~/Desktop/New | ForEach-Object {
while ([string]($_.Name) -notmatch "^[a-z].*" -or [string]($_.Name) -notmatch "^[A-Z].*") {
Rename-Item -NewName { [string]($_.Name).Substring(1) }
}
Write-Host $_.Name
}
Кажется, что вывод выводится с ошибкой.
Rename-Item : Cannot evaluate parameter 'NewName' because its argument is
specified as a script block and there is no input. A script block cannot be
evaluated without input.
At line:8 char:30
+ Rename-Item -NewName { $File.Substring(1) }
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [Rename-Item], ParameterBindingException
+ FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.RenameItemCommand
Идея состоит в том, чтобы проверить имя файла, чтобы увидеть, является ли он символом, и, если не удалить его, удалить ". - / и пробел"
Оригинальные файлы, с которыми я работаю, выглядят так:
1. source - data (1).log
100. - source - Data.log
(1) Source - data.log
source - data.log
<space><space> source - data.log
и результат, который я ищу из вышесказанного, таков: меня не беспокоят дубликаты имен файлов, так как источник и данные меняются день ото дня, и папка регулярно очищается ...
source - data (1).log
source - Data.log
Source - data.log
source - data.log
source - data.log
Может кто-нибудь сказать мне, как обойти эту ошибку?