Windows 7 dos arquivos em lote para abrir o arquivo, ler segunda ou terceira linha e renomear o arquivo para o texto encontrado [closed]

1

Tenho cerca de dois mil arquivos de texto que preciso renomear, mas preciso abrir o arquivo para encontrar a linha que começa com a letra "O", extrair o "O" e os próximos cinco caracteres, fechar o arquivo e renomear o arquivo para o texto encontrado.

Eu andei brincando com isso por um par de coisas tentando ensinar a mim mesmo o suficiente para fazer isso, mas estou ficando sem tempo.

Alguém tem alguma sugestão? Caso contrário, terei que abrir cada arquivo, localizar o texto e renomear os arquivos, um de cada vez.

EDITAR
Primeiramente. obrigado pelas respostas.

Existe apenas uma linha por arquivo de texto começando com o "O". Estes são programas CNC e o "O" é o nome do programa que o equipamento CNC reconhece. Por exemplo "O01234".

Este é um exemplo do formato do programa.

%

O01234

Às vezes, a primeira linha do arquivo está vazia ou apenas um CR, e a próxima linha contém o%. Foi por isso que eu disse que a segunda ou terceira linha conteria o "O". Atualmente, os programas têm um nome de arquivo alfanumérico como "V180OP20.ptp". A extensão do arquivo .ptp é exatamente o que o nosso software CAM anexa. Os arquivos em si não contêm nada além de texto ASCII.

Também é possível que alguns arquivos contenham apenas quatro números após o "O", em vez de cinco.

    
por Tim 16.12.2014 / 21:55

2 respostas

1

O Windows 7 apresenta um novo shell muito melhor que o DOS, chamado PowerShell. O PowerShell pode ser aberto com o atalho "Menu Iniciar > Todos os programas > Ferramentas administrativas > Windows PowerShell".

Você precisará executar esse comando uma vez para permitir que os scripts sejam executados no seu computador:

Set-ExecutionPolicy RemoteSigned

Então você só precisa criar o script (extensão de arquivo .ps1) com as seguintes linhas de código:

$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."
    }
}

Substitua 'C:\Temp\Test' pelo caminho da pasta e remova + '.txt' se os seus arquivos de texto não tiverem extensões. Em seguida, basta executar o script.

    
por 16.12.2014 / 22:20
1

Você pode usar um loop FOR com findstr para encontrar as linhas que começam com "O" e depois renomear os arquivos com base no texto retornado.

Usando alguns arquivos como exemplo:

C:\temp>dir /s /b
C:\temp.txt
C:\temp.txt
C:\temp.txt

Você pode usar o seguinte comando para retornar o texto das linhas que começam com "O" para todos os arquivos no diretório atual e em todos os subdiretórios:

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

Agora você pode usar os dois pontos da saída como um delimitador para separar os nomes de arquivos atuais dos desejados:

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

Você não lista muitos detalhes, por isso é impossível fornecer o comando exato que você precisa, mas esperamos que este exemplo o inicie. Você pode usar expressões regulares com findstr se o O e os cinco caracteres a seguir não forem os únicos caracteres nessa linha.

EDIT :: Baseado na atualização / edição do OP, CD para o diretório com seus arquivos e execute o seguinte comando:

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