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 /b
produz 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=2
que você deseja o que vem depois do sublinhado. VerPARA/Fpara obter uma explicação mais completa de como usar FOR /F
em 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.txt
se 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 off
como a primeira linha do arquivo em lote antes do set
comando, 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] }