Adiciona data e hora aos arquivos em lote

1

Este código lê arquivos da pasta e atribui a mesma data a todos.

Código:

@echo off
set datetime=%date:~4,2%%date:~7,2%%date:~10,4%_%time:~0,2%%time:~3,2%%time:~6,2%
for /f "delims=" %%x in ('dir /b /s D:\v\*.*') do (
  echo %%~dpnx_%datetime%%%~xx>>C:\Users\TechMadmin\Desktop\scripts\a.txt
)
move /y C:\Users\TechMadmin\Desktop\scripts\a.txt C:\Users\TechMadmin\Desktop\scripts\b.txt

Saída:

a_08042016_095244.txt 
a_08042016_095244.txt

Meu requisito é ter data e hora diferentes para dois arquivos, para que possamos diferenciar com a mudança em milissegundos.

Resultado exigido:

a_08042016_095244.txt 
a_08042016_095252.txt
    
por user3051956 08.08.2016 / 11:53

1 resposta

1

Meu requisito é ter data e hora diferentes para dois arquivos

so that we can differentiate with change in milliseconds.

Você pode usar o tempo de criação do arquivo para obter um valor único de data / hora, pois é improvável que dois arquivos com o mesmo nome tenham exatamente o mesmo horário de criação.

test.bat:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%x in ('dir /a-d /b /s f:\v\*.*') do (
  rem use file creation time to get unique timestamp.
  rem need to double up the \ for the wmic query.
  set _name=%%x
  set _name=!_name:\=\!
  for /f %%t in ('wmic datafile where name^="!_name!" get creationdate ^| findstr /brc:[0-9]') do (
    set _datetime=%%t
    )
  rem strip last 4 characters as always the same
  echo %%~dpnx_!_datetime:~0,-4!%%~xx>>out.log
)
endlocal

Exemplo de uso:

F:\test>dir /a-d /b /s f:\v
f:\v\A\a.txt
f:\v\A\B\a.txt
f:\v\A\C\a.txt
f:\v\A\C\D\a.txt

F:\test>test

F:\test>type out.log
f:\v\A\a_20160804231753.551948.txt
f:\v\A\B\a_20160804231800.344348.txt
f:\v\A\C\a_20160804231803.581548.txt
f:\v\A\C\D\a_20160804231807.072814.txt

Seu arquivo de lote foi modificado adequadamente:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%x in ('dir /a-d /b /s d:\v\*.*') do (
  rem use file creation time to get unique timestamp.
  rem need to double up the \ for the wmic query.
  set _name=%%x
  set _name=!_name:\=\!
  for /f %%t in ('wmic datafile where name^="!_name!" get creationdate ^| findstr /brc:[0-9]') do (
    set _datetime=%%t
    )
  rem strip last 4 characters as always the same
  echo %%~dpnx_!_datetime:~0,-4!%%~xx>>C:\Users\TechMadmin\Desktop\scripts\a.txt
)
move /y C:\Users\TechMadmin\Desktop\scripts\a.txt C:\Users\TechMadmin\Desktop\scripts\b.tx
endlocal

Leitura Adicional

por 08.08.2016 / 12:59

Tags