• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_JInGAmIX_

renomear ficheiros

16 mensagens neste tópico

boas pessoal...

gostava de saber se me poderiam ajudar..

preciso dum programa que renomeie ficheiros, passo a explicar.

eu tenho um ficheiro algures numa pasta que se chama "jf123456.txt" e quero que ele mude para "sa123456.txt", através dum clik num icon que posso meter no ambiente de trabalho, ou seja, tenho um icon no ambiente de trabalho que quando cliko executa o programa, que consiste em mudar o nome do ficheiro (neste caso de "jf123456.txt" para "sa123456.txt" ATENÇÃO ISTO SÃO SÓ EXEMPLOS) e que guarde talvez numa variável o novo nome do ficheiro, pois quando clikar outra vez ele vai mudar de nome novamente, isto é, se clikar 50 vezes no executável do programa (chamemos-lhe assim) ele vai mudar 50 vezes o nome ao ficheiro.

quem sabe isto até da para fazer com um ficheiro batch, mas a minha experiência em programação é muito pouca, por aquilo que tenho visto, talvez a solução seja em VB, mas não percebo nada de VB.....penso que vai haver aqui muita gente que me vai poder ajudar...

desde já obrigado a todos aqueles que irão dar o seu contributo para a solução do meu problema..

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso dá para fazer VB em batch ou de resto em praticamente em todas as linguagens de programação. É até um bom exercício para começares.

O windows por si só faz isso como podes ver aqui:

http://www.mediacollege.com/computer/file/batch-rename/windows-xp.html

Mas essa funcionalidade é muito limitada, e pelo piada da coisa podias fazer tu uma coisa à tua medida.

Em linux há muitas formas de fazer isso usando variadas ferramentas.

Tens aqui uns snippets em shellscript:

http://www.linuxforums.org/forum/linux-programming-scripting/12744-script-batch-renaming-files.html

Em batch files não deve ser muito diferente.

Se tiveres dúvidas apita aí.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedrotuga, parece-me que não é isso que ele pretende, mas sim o seguinte:

Dada uma estrutura de ficheiros:

\
|
+--\folder
     |
     +--\ficheiro_original
     |
     +-- ..

criar um script que, quando executado, modifique o nome do ficheiro_original para um nome aleatório(?).

O problema resolve-se com a criação de um segundo ficheiro que guarde o último nome atribuído (ou que guarde todos os nomes já atribuídos), para que, na próxima execução, saiba qual o ficheiro a renomear.

Em Perl eu faria algo assim (dispensando um segundo ficheiro para arquivar o último nome atribuído, uma vez que o novo nome do ficheiro é re-escrito na última linha do script):

#!/usr/bin/perl 
use strict;
use warnings;
use Tie::File;

my $dir = q|/home/slack_guy/|;
chomp(my $old_name = $dir . (<DATA>));
my $new_name = int(rand(time)) . '.txt';
rename($old_name,"$dir$new_name") or system("mv",$old_name,"$dir$new_name");

tie my @FILE, 'Tie::File', $0 or die "$!\n";
$FILE[-1] = $new_name;
untie @FILE or die "$!\n";

__DATA__
ficheiro_original.txt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmmm ... isso não deve ser muito díficil com batch files (ou PowerShell).

Qual é a relevância de "jf", "sa", "123456"?

Quando o ficheiro original tem o nome "jf123456.txt" queres passá-lo a "sa123456.txt".

E quando for "sa123456.txt"?

E se fosse "jf424242.txt"?

Quais são as regras (se é que as há) para passar de um nome para outro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas pessoal

desde já agradeço a vossa ajuda

reformulando o meu programa, é o seguinte...

imaginemos que temos uma pasta algures no disco que contem, imagine-se 10 ficheiros com o nome "ft0001200.xml" a "ft0001210.xml", mas daqui a pouco ja vai ter mais ficheiros continuando com os nomes "ft0001211.xml", "ft0001212.xml" etc...

se o programa procurar o nome dos ficheiros começados por "ft" e os mudasse para, por exemplo "co" e como daqui a algum ele vai ter mais ficheiros "ft", porque estes ficheiros fazem parte de um programa que os está sempre a gerar, ou seja, vai ficar com ficheiros "ft" e com os "co" (que antigamente eram "ft") , era só clicar no suposto icon que vai estar no ambiente de trabalho e ele procura os  ficheiros que comecem por "ft" novamente, modificando-os então para "co", ficavamos então só com ficheiros "co" novamente. depois imaginemos que eu amanha já tenho lá mais ficheiros começados por "ft"era só clicar novamente.

torna-se mais fácil assim ou não ?? :) :) :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

os  ficheiros que comecem por "ft", modificando-os para "co"

@ echo off
setlocal
REM DIRECTORIA acaba com um \
set DIRECTORIA="C:\Documents and Settings\_JInGAmIX_\xml\"
ren %DIRECTORIA%ft*.xml co*.xml

Crias esta batch file onde quiseres (por exemplo em "C:\Documents and Settings\_JInGAmIX_\P@P\ft-co.bat") tendo atenção para alterar a linha set DIRECTORIA=... para reflectir a directoria onde tens os teus ficheiros xml.

Depois crias um shortcut para a batch file no Desktop.

Pronto, agora é só clicar :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois...bem me parecia que esta resolução ia ser mais fácil e também resolve o meu problema..e até posso fazer logo o batch no ambiente de trabalho, nem preciso de ter o atalho.

com esta resolução ele procura todos os ficheiros que estão na pasta X (ou seja na linha set Directoria onde tu tens xml, vai ser a minha pasta onde estão os ficheiros) e muda o nome a todos.. é isso não é???

desculpa a minha ignorância..

brigadao pela ajuda

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ele procura todos os ficheiros que estão na pasta X [...] e muda o nome a todos.. é isso não é?

Exactamente! Ou melhor quase exactamente ...

ele procura (e muda o nome) todos os ficheiros cujo nome comece por "ft" e acabe em ".xml".

Obrigado pelo feedback ... e não é preciso exagerar :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tou a exagerar quem merece tem que ouvir..(ou nesta vaso ler)...até pode ser simples mas para mim ja é uma dor de cabeça...

Então e ainda outra questão se eu no fim de eles tarem com o novo nome, eu quiser move-los para outra pasta..??? é possível..

tipo renomeia e depois corta-os daquela pasta e mete noutra que eu hei-de destinar..

se me puderes continuar a ajudar agradecia bué...

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É possível :)

Primeiro fazes o rename como acima, depois o move porque o move não consegue fazer as duas coisas ao mesmo tempo.

@ echo off
setlocal
REM DIRECTORIA_* acaba com um \
set DIRECTORIA_ORIGEM="C:\Documents and Settings\_JInGAmIX_\xml\"
set DIRECTORIA_DESTINO="C:\Documents and Settings\_JInGAmIX_\xmlbak\"
ren %DIRECTORIA_ORIGEM%ft*.xml co*.xml
move %DIRECTORIA_ORIGEM%co*.xml %DIRECTORIA_DESTINO% > nul

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fixe... :)

ou seja basta juntar as ultimas 4 linhas que escreveste àquilo que já tenho e já da...ou tem que ser dois ficheiros btach diferentes??

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja exprimentei..funcionou na boinha...

realmente tu dominas isto...brigadão..

:) :) :):D:thumbsup:

abraço

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
basta juntar as ultimas 4 linhas que escreveste àquilo que já tenho e já da...ou tem que ser dois ficheiros btach diferentes??

É só um ficheiro batch, a primeira versão é para apagar e substituir pela segunda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pah até pode ser só um um file batch mas sozinho não conseguia por isso há que dar valor a quem o fez..

eu acrescentei as ultimas 4 linhas da segunda versão e funciona também..de qualquer forma achas que devo substituir o código todo pela segunda versão???

brigadão por tudo

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, substitui o código todo pela segunda versão.

Da maneira que tens funciona, mas tem mais trabalho que o necessário.

Tás-lhe a pedir para fazer a mesma coisa (o "ren ...") duas vezes. Mas, se funcionou à primeira da segunda vez não tem nada para fazer; se não funcionou à primeira também não vai funcionar à segunda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora