Criando um script de lote do DOS para renomear arquivos

3

Atualmente estou preso a um problema com um script em lote do DOS em que estou trabalhando e preciso de ajuda para renomear os arquivos.

Aqui está o esquema de renomeação que estou procurando:

Nomes de arquivos originais

FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD 

Eu preciso pegar a última parte do nome do arquivo original ( DDMMYY ) e transformá-lo em YYMMDD .

Deve ser assim

FIL120_000112_301215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_311215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_040116 ==> MYNAME_TLD_EXT_151230
FIL120_000112_050116 ==> MYNAME_TLD_EXT_151230

Por favor, note que não vai caber necessidade atual para obter a renomeação feita usando a data atual com algum comando nessa parte do nome do arquivo.

Eu quero saber se é possível, com um script em lote, obter os últimos caracteres da parte do nome do arquivo para trocar de posição, então, essencialmente, YY e DD trocarão de lugar.

Além disso, eu preciso das outras partes antes que o YYMMDD fixo seja substituído por caracteres estáticos de MYNAME_TLD_EXT_ , em vez do que pode ser antes do switch, então o resultado final será MYNAME_TLD_EXT_<YYMMDD> e não ter extensão de arquivo .

    
por khiloc 07.01.2016 / 09:23

1 resposta

5

Building a DOS script to rename files

Original filenames:

FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD

I need to take the original filename last portion (DDMMYY) and turn it into YYMMDD.

Abaixo está um script em lotes do Windows que fará exatamente o que você lista em sua pergunta - se você quiser uma explicação do que este script está fazendo, me avise e adicionarei comentários à lógica para esclarecer exatamente se você não tem certeza baseado no que eu tenho nele.

Você precisará alterar o SET SourceDir= para ser o caminho completo dos locais onde os arquivos que você precisa renomear estão localizados.

Eu usei a extensão de arquivo .txt desses arquivos no meu exemplo, mas você pode alterá-la para qualquer outra extensão na parte DIR /B "%SourceDir%\*_*_*.txt" da lógica abaixo. Ajudarei com isso se você tiver problemas. Avise-se me.

Além disso, se seus arquivos não tiverem extensões, informe-nos e adicionarei outro exemplo a essa resposta sem nenhuma extensão de arquivo que ainda possa ser concluída para você.

Por favor, note que eu testei e confirmei que isso funcionou exatamente como esperado com os exemplos acima e explicações na sua pergunta acima.

Exemplos de script em lote do Windows

Nome do arquivo Analisar e renomear arquivos com extensões

@ECHO ON

SET SourceDir=C:\PathForFilesToRename

FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*.txt""') DO (

    CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA" "%%~XA"

)
GOTO EOF

:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
SET Extension=%~3

REN "%~1" "%FnamePart1%_%YY%%MM%%DD%%Extension%"
GOTO EOF

Nome do arquivo Analisar e renomear arquivos sem extensões

@ECHO ON

SET SourceDir=C:\PathForFilesToRename

FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (

    CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"

)
GOTO EOF

:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%

REN "%~1" "%FnamePart1%_%YY%%MM%%DD%"
GOTO EOF

Nome do arquivo Analisar e renomear arquivos sem extensões com a parte de renomeação estática

( Nota Importante: Se dois arquivos tiverem o mesmo nome YYMMDD quando renomeados com o nome estático, então isso será um problema, mas contanto que não haja dois arquivos no mesmo pasta terá o mesmo nome YYMMDD, então isso deve funcionar sem nenhum problema .. Se houver um arquivo que já foi renomeado com o nome estático e, em seguida, o próximo tenta renomear com o mesmo nome estático, então isso será um problema. )

Variável Nota: No seguinte SET StaticFnamePart= você pode definir isso para o que você quer que seja definido para ser para a parte renomear estático do arquivo avançar e que vai ser o que é usado para colocar nessa parte do arquivo renomeado.

@ECHO ON

SET SourceDir=C:\PathForFilesToRename
SET StaticFnamePart=MYNAME_TLD_EXT

FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (

    CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"

)
GOTO EOF

:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%

REN "%~1" "%StaticFnamePart%_%YY%%MM%%DD%"
GOTO EOF

Mais recursos e leitura

por 08.01.2016 / 20:08