Como excluo parte do nome de um arquivo de um lote de arquivos no Windows 8.1?

Como excluo parte do nome de um arquivo de um lote de arquivos no Windows 8.1?

Tenho muitos arquivos em uma pasta, mas todos começam com uma linha de números e são separados do nome real do arquivo por um "_"

Por exemplo:

123123123_nomedoarquivo.txt

456456456_nomedoarquivo2.txt

789789789_nomedoarquivo3.txt

Imagino que você possa executar algum tipo de comando para remover os caracteres antes do "_" e do próprio "_".

Qualquer ajuda é muito apreciada!

Responder1

Se você não se sente confortável com o PowerShell, talvez queira dar uma olhada em utilitários gratuitos como: http://www.bulkrenameutility.co.uk/Download.php

Responder2

Se você quiser apenas remover os caracteres de uma listagem, você pode colocar o seguinte em um arquivo em lote, substituindo o diretório relevante no lugar dedirname

for /f "tokens=2 delims=_" %%G in ('dir /b dirname') do @echo %%G

O dir /bproduz uma listagem de diretório em formato simples (sem informações de cabeçalho ou resumo). Indica delims=_que o sublinhado deve ser usado como delimitador e indica tokens=2que você deseja o que vem depois do sublinhado. VerPARA/Fpara obter uma explicação mais completa de como usar FOR /Fem um arquivo em lote.

Mas se você quiser renomear os arquivos sem os números e o sublinhado, no seu exemplo você tem dois arquivos que produziriam o nome filename2.txtse os números e o sublinhado fossem removidos. O que você quer que seja feito nesse caso? Ou você pretendia usar filename3.txt para o terceiro arquivo?

Se o que segue o sublinhado for um nome exclusivo, você poderá usar o seguinte para renomear os arquivos, substituindo o diretório apropriado pordiretório relevante:

set dirname="relevantdir"
for /f "tokens=1,2 delims=_" %%G in ('dir /b %dirname%') do rename %dirname%\%%G_%%H %%H

No caso acima, o primeiro token, %%G, é o que está antes do sublinhado e o segundo token, %%Hé o que está depois do sublinhado. Eu os reuni novamente para a operação de renomeação e os precedi com o diretório, pois o comando rename usa a sintaxe RENAME [drive:][path]filename1 filename2.

Coloque an @echo offcomo a primeira linha do arquivo em lote antes do setcomando, se não quiser ver cada operação de renomeação conforme ela ocorre.

Responder3

powershell    
ls "*_*.txt" | %{mv -confirm:$false $_.name ($_.name).split("_")[1]}

o PowerShell deve ser preferível em um Win8.

Responder4

PowerShell: Supondo que todos os arquivos da pasta precisem ser renomeados (como o OP implica):

$Folder = 'c:\path\to\folder'
gci $Folder | Rename-Item -NewName { $_.Name.Split('_')[-1] }

informação relacionada