Renomeie os arquivos para adicionar data modificada ao nome do arquivo com o Windows CMD ou simples .TXT

2

Estou tentando renomear um grande lote de arquivos para incorporar as datas na coluna "Data de modificação" do Gerenciador de arquivos em cada nome de arquivo no formato YYYYMMDD. Consegui gerar um relatório da pasta de arquivos desejada de todos os arquivos usando as seguintes etapas:

  1. Clique na pasta Dicas e truques
  2. Mantenha pressionada a tecla Shift e clique com o botão direito do mouse na pasta Dicas e truques
  3. Clique em "Abrir janela de comando aqui"
  4. Digite dir>filename.txt
  5. Clique em Entrar
  6. Abra a pasta Dicas e truques e procure um arquivo de texto com o nome de arquivo que você criou

Em seguida, puxei o relatório para o Excel como um arquivo de texto delimitado e manipulei o conteúdo. Agora, tenho a data da "última modificação" em uma coluna e o nome do arquivo em outra:

Date Modified | File Name

1/9/2009 | ArcGIS_TT_Projections_Transformations.doc

2/18/2014 | ArcGIS_TT_Re-Projection_WMAS.docx

1/9/2009 | ArcGIS_TT_Set_Selectable_Layers.doc

1/9/2009 | ArcGIS_TT_Spatial_Join.doc

4/21/2010 | ArcGIS_TT_View_CLU_History_Layer.doc

Eu só tive sucesso usando scripts renomeados como os seguintes:

@echo off
setlocal enableDelayedExpansion
for %%F in ("ArcGIS_TT_Projections_Transformations*.txt") do (
  set "name=%%F"
  ren "!name!" "!name:ArcGIS_TT_Projections_Transformations=ArcGIS_TT_Projections_Transformations_20090109!"
)
pause

Mas estou tentando evitar a repetição desse processo para 61 arquivos. Alguém aí tem uma sugestão de um prompt do Windows CMD ou um simples .txt que eu possa usar para puxar as informações de data modificada para o nome do arquivo mais automaticamente?

Obrigado pela sua ajuda!

    
por newbie 13.05.2016 / 20:23

1 resposta

0

Ok @newbie, aqui está o código que você precisa usar para iterar os arquivos de texto, obter a data de modificação de cada arquivo, copiar cada arquivo usando a data modificada como parte do nome do arquivo e excluir os arquivos originais. Você estava muito perto, mas estava faltando algumas coisas.

Para obter a data de modificação de um arquivo, podemos usar set "MDate=%%~tF" .

Para analisar a data fornecida por set "MDate=%%~tF" , você precisará especificar quais partes do valor armazenadas por% MDate% você deseja usar na saída. Você pode usar o comando set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!" para converter a saída de set "MDate=%%~tF" de MM / DD / AAAA hh: mm para AAAAMMDD.

Depois disso, podemos copiar os arquivos para novos arquivos usando o valor de% ParsedDate% no nome do arquivo.

Você deve ver duas cópias dos arquivos. Se você deseja excluir os arquivos originais, basta executar o comando for %%F in ("C:\test\*.txt") do ( del %%F ) . Isso vai deixar você com os arquivos de texto renomeados. Para converter o arquivo .txt.new para .txt, use o comando ren "C:\test\*.new" *. .

Como estamos em um loop for, precisamos mudar a forma como lidamos com varables (que, com base no que você escreveu até agora, já sabe). Nós mudamos% para! para nomes de variáveis dentro de um loop. Portanto, se você tiver o nome da variável example , faça referência à variável usando !example! dentro do loop em vez de %example% .

Para que as variáveis dentro do loop funcionem, também precisamos adicionar o comando setlocal enabledelayedexpansion antes do loop.

Isso deve cobrir tudo. Por favor, sinta-se livre para votar ou marcar a resposta como correta, se isso resolve o problema.

O arquivo em lote completo é fornecido abaixo.

setlocal enabledelayedexpansion

for %%F in ("C:\test\*.txt") do ( 
    set "MDate=%%~tF"
    set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
    copy %%F %%~dpnF_!ParsedDate!%%~xF.new )

for %%F in ("C:\test\*.txt") do ( 
    del %%F )

ren "C:\test\*.new" *.

exit
    
por 13.05.2016 / 23:51