1

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

Я возился с этим пару слов, пытаясь научить себя тому, как это сделать, чтобы попробовать, но у меня заканчивается время.

У кого-нибудь есть предложения? В противном случае мне придется открывать каждый файл, находить текст и переименовывать файлы по одному.

РЕДАКТИРОВАТЬ
Прежде всего. спасибо за ответы.

В текстовом файле есть только одна строка, начинающаяся с "O". Это программы ЧПУ, а "O" - это имя программы, которое распознает оборудование ЧПУ. Например "O01234".

Это пример формата программы.

%

O01234

Иногда первая строка файла пуста или просто CR, а следующая строка будет содержать%. Вот почему я сказал, что вторая или третья строка будет содержать "О". В настоящее время программы имеют буквенно-цифровое имя файла, например, "V180OP20.ptp". Расширение файла .ptp - это то, к чему прилагается наше программное обеспечение CAM. Сами файлы содержат только текст ASCII.

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

2 ответа2

1

Вы можете использовать цикл FOR с findstr, чтобы найти строки, начинающиеся с "O", а затем переименовать файлы на основе возвращенного текста.

Используя несколько файлов в качестве примера:

C:\temp>dir /s /b
C:\temp\1.txt
C:\temp\2.txt
C:\temp\3.txt

Вы можете использовать следующую команду, чтобы вернуть текст для строк, начинающихся с "O" для всех файлов в текущем каталоге и любых подкаталогах:

C:\temp>findstr /S /B O *.txt
1.txt:Oabcde
2.txt:Oabcdf
3.txt:Oabcdg

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

C:\temp>for /f "tokens=1-2 delims=:" %A in ('findstr /S /B O *.txt') do ren %A %B.txt
C:\temp>ren 1.txt Oabcde.txt
C:\temp>ren 2.txt Oabcdf.txt
C:\temp>ren 3.txt Oabcdg.txt

Вы не перечисляете много деталей, поэтому невозможно дать точную команду, которая вам нужна, но, надеюсь, этот пример поможет вам начать. Вы можете использовать регулярные выражения с findstr, если O и следующие пять символов не являются единственными символами в этой строке.

РЕДАКТИРОВАТЬ :: На основе обновления / редактирования из OP, CD в каталог с вашими файлами и выполните следующую команду:

for /f "tokens=1-2 delims=:" %A in ('findstr /S /B O *.ptp') do ren %A %B.ptp
1

В Windows 7 новая оболочка намного лучше, чем в DOS, она называется PowerShell. PowerShell можно открыть с помощью ярлыка «Меню« Пуск »>« Все программы »>« Администрирование »>« Windows PowerShell ».

Вам нужно будет выполнить эту команду один раз, чтобы разрешить запуск сценариев на вашем компьютере:

Set-ExecutionPolicy RemoteSigned

Тогда вам просто нужно создать скрипт (расширение файла .ps1) со следующими строками кода:

$myFolderFullOfTextFiles = 'C:\Temp\Test'
$linesToReadInEachTextFile = 5

$myTextFiles = Get-ChildItem -Path $myFolderFullOfTextFiles

foreach( $textFile in $myTextFiles )
{
    $newName = ''

    foreach( $line in $(Get-Content -Path $textFile.FullName -Head $linesToReadInEachTextFile) )
    {
        if( $line -like 'O*' )
        {
           $newName = $textFile.DirectoryName + '\' + $line.Substring(0,6) + '.txt'
        }
    }

    try
    {
        Write-Host $newName
        Rename-Item -Path $textFile.FullName -NewName $newName
    }
    catch
    {
        Write-Host "Failed to rename $textFile."
    }
}

Замените 'C:\Temp\Test' на путь к папке и удалите + '.txt' если ваши текстовые файлы не имеют расширений. Тогда просто запустите скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .