Como renomear arquivos com base no timestamp, com script em lote?

0

Suponha que eu tenha 10 arquivos gerados pelo sistema todos os dias em D: \ Temp. Os nomes são gerados aleatoriamente.

Suponha que eu precise renomear o mais antigo para ser 'aaa', o segundo mais antigo a ser 'bbb', depois 'ccc', 'ddd' e assim por diante.

considere que estes são os nomes de destino que eu usarei:

Beijing
shanghai
hangzhou
suzhou
newyork
lanzhou
huzhou
guangzhou
tianjin
sichuang

Alguém pode ajudar com um script em lote para realizar isso?

Eu realmente fiz esta pergunta ontem e recebi uma resposta maravilhosa usando o PowerShell, mas hoje percebi na VM da empresa que não tenho o PowerShell instalado (não posso instalar por conta própria), por isso preciso postar uma pergunta novamente para que as pessoas que já responderam possam manter suas aceitar) votos.

    
por ella 16.05.2013 / 01:12

2 respostas

0
@echo off
setlocal disableDelayedExpansion
set "file1=aaa"
set "file2=bbb"
set "file3=ccc"
set "file4=ddd"
set "file5=eee"
set "file6=fff"
set "file7=ggg"
set "file8=hhh"
set "file9=iii"
set "file10=jjj"

for /f "tokens=1,2* delims=: " %%A in (
  'wmic datafile where "drive='d:' and path='\temp\'" get creationDate^, name ^| findstr "^[0-9]" ^| sort ^| findstr /n "^"'
) do for /f "delims=" %%F in ("%%C") do (
  setlocal enableDelayedExpansion
  for %%N in ("!file%%A!") do (
    endlocal
    ren "%%F" %%N
  )
)

Se você quiser alterar o caminho, certifique-se de duplicar todos os \ como \ e de garantir que o caminho comece e termine com \ . A letra de unidade apropriada (com dois pontos) deve aparecer na opção de unidade.

Os valores de drive e caminho devem ser colocados entre aspas simples - o WMIC usa a sintaxe SQL.

    
por 16.05.2013 / 06:08
0

Isso deve funcionar para você. Ele renomeia 26 arquivos para aaa para zzz , a data de criação mais antiga primeiro. Observe a saída e remova o comando echo , se estiver OK.

@echo off&setlocal
set "startfolder=D:\temp"
set "alphas=abcdefghijklmnopqrstuvwxyz"
cd /d "%startfolder%"

set /a counter=0
for /f "tokens=3*" %%a in ('dir /a-d /od /tc ^| findstr "^[0-9]"') do set "fname=%%b"&call:process
goto:eof

:process    
setlocal enabledelayedexpansion
set "nname=!alphas:~%counter%,1!!alphas:~%counter%,1!!alphas:~%counter%,1!"
if not defined nname goto:eof
echo rename "%fname%" "!nname!"
endlocal
set /a counter+=1
goto:eof

Se o seu comando dir mostrar a hora com AM / PM, defina tokens=4* .

    
por 16.05.2013 / 11:29