Переименование файлов на основе определенного текста в файле, файл содержит много Пробелов и другого текста

Переименование файлов на основе определенного текста в файле, файл содержит много Пробелов и другого текста
Переименование файлов на основе определенного текста в файле, файл содержит много Пробелов и другого текста - flyd2069 @ Unsplash

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

У меня есть несколько файлов, это обычные текстовые файлы. Вот конкретная строка текста, которую мне нужно выбрать и переименовать

"RECORDER ID: TEST1234               GROUP:  TEST     START TIME: 08/09/22 02:01"

После TEST1234 стоит несколько пробелов (например, десять или более пробелов) Это 3-я строка txt в файле. Вторая строка текста пустая.

t, так что это правильное имя файлаВ настоящее время имя файла представляет собой строку цифр ".EU" Я хочу переименовать файл в "TEST1234.EU", основываясь на этом примере выше. вот сценарий, который я пробовал

cd C:\temp
$files = [System.Collections.ArrayList]@()
select-string -Path "*.*" -Pattern "RECORDER ID:" | ForEach-Object {   
    $old_filename = $_.Filename
    $new_filename = $_.line -replace "^.*RECORDER ID = ""","" -replace """.*$",""  
    $null = $files.Add(@{"old"=$old_filename;"new"=$new_filename})
}
$files |ForEach-Object{
    $old_filename = $_.old
    $new_filename = $_.new
    rename-item $old_filename $new_filename -Force
}

В итоге $new_filename содержит всю строку шаблона, мне нужно разделить ее после первого пробела после TEST124, но я не могу понять, как разделить i

можно использовать следующим образом:

$new_filename = $_.line -replace "RECORDER ID: (\w+).+", '$1.txt'

TEST1234 захватывается и повторно используется для замены содержимого строки, и таким образом становится значением $new_filename.

Ваш код будет выглядеть так:Замените строку на новое имя va

$files = [System.Collections.ArrayList]@()
select-string -Path "*.*" -Pattern "RECORDER ID:" | ForEach-Object {   
    $old_filename = $_.Filename
    $new_filename = $_.line -replace "RECORDER ID: (\w+).+", '$1,txt'  
     $files.Add(@{"old"=$old_filename;"new"=$new_filename})
}
$files |ForEach-Object{
    $old_filename = $_.old
    $new_filename = $_.new
    rename-item $old_filename $new_filename -Force
}

NevaDev, 11 марта 2023 г., 13:29