/ / Archivo por lotes para renombrar todos los archivos en una carpeta agregando la fecha / hora actual al comienzo del nombre de archivo: fecha, hora, archivo por lotes, renombrar

Archivo de lote para cambiar el nombre de todos los archivos en una carpeta agregando la fecha / hora actual al comienzo del nombre de archivo - fecha, hora, archivo de lote, renombrar

Parece que no puedo entender cómo los archivos por lotes agregan aaaa / mo / dd / hh / mm / ss al comienzo de los nombres de archivo. (Usando Windows 7) La precisión en el segundo es importante.

En realidad, no tiene que ser un archivo por lotes, solo tiene que ser un pequeño programa que Directory Monitor puede ejecutar cada vez que agrego archivos a una carpeta: http://brutaldev.com/page/Directory-Monitor.aspx Solo imagino que un archivo por lotes sería el enfoque más simple y eficiente, pero cualquier otra sugerencia es bienvenida.

Trabajo con muchos archivos numerados secuencialmente connombres de archivo superpuestos y necesito una forma rápida de cambiarles el nombre cada vez que los agregue a una carpeta de modo que nunca haya ningún archivo con el mismo nombre, pero seguirán en orden secuencial. Así es como pensé en agregar la fecha y hora actuales al comienzo del nombre de archivo y por qué los segundos son importantes, ya que puedo agregar fácilmente múltiples conjuntos a una carpeta en menos de un minuto, pero ciertamente no menos de un segundo. Sería ideal si el archivo por lotes pudiera ignorar las extensiones de archivo y simplemente agregar la fecha / hora actual al comienzo de cualquier archivo agregado a la carpeta.

Respuestas

0 para la respuesta № 1
   @ECHO off
SETLOCAL
IF [%1] NEQ [] goto s_start

:: Author - Simon Sheppard, July 2003
:: Tested for Windows NT, 2K, XP

ECHO STAMPME.cmd
ECHO REName a file with the DATE/Time
ECHO.
ECHO SYNTAX
ECHO       STAMPME TestFile.txt
ECHO.
ECHO       STAMPME "Test File.txt"
ECHO.
ECHO       STAMPME "c:docsTest File.txt"
ECHO.
ECHO       In a batch file use CALL STAMPME ...

:: To change the filename format just change around the last line below

GOTO :eof

:s_start

SET _file=%~n1%
SET _pathname=%~f1%
SET _ext=%~x1%

::Get the date
::  note ISO 8601 date format would require 4 digit YYYY Year)

FOR /f "tokens=6-8 delims=/ " %%G IN ("NET TIME \%computername%") DO (
SET _mm=%%G
SET _dd=%%H
SET _yy=%%I
)

:: Get the time
FOR /f "tokens=2-4 delims=:." %%G IN ("cmd /c "time<nul"") DO (
SET _hr=%%G
SET _min=%%H
SET _sec=%%I
GOTO :done
)
:done
ECHO Today is Year: [%_yy%] Month: [%_mm%] Day: [%_dd%]
ECHO The time is:   [%_hr%]:[%_min%]:[%_sec%]

REN "%_pathname%" "%_hr%-%_min%-%_sec%@%_file%%_ext%"

Esto parece funcionar para mi


0 para la respuesta № 2

Preferiría soluciones que no dependan de la configuración local (wmic proporciona siempre el mismo formato):

@echo off
setlocal EnableDelayedExpansion
for %%a in (a.*) do (
for /f %%i in ( "wmic os get localdatetime /value ^|find "Local"" ) do set %%i
set ldt=!LocalDateTime:~0,4!-!LocalDateTime:~4,2!-!LocalDateTime:~6,2!-!LocalDateTime:~8,2!-!LocalDateTime:~10,2!-!LocalDateTime:~12,2!-!LocalDateTime:~15,3!

echo seconds        ### ren %%a !LocalDateTime:~0,14!%%a
echo milliseconds   ### ren %%a !LocalDateTime:~0,18!%%a
echo with separator ### ren %%a !ldt!-%%a
)

0 para la respuesta № 3

Las primeras cuatro líneas de este código le darán las variables YY DD MM YYYY HH Min Sec confiables en XP Pro y superiores.

@echo off
for /f "tokens=2 delims==" %%a in ("wmic OS Get localdatetime /value") do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"

:: this line will rename the files in the current folder which haven"t already
:: been renamed by checking for the fullstamp format at the start of the line
:: but it will skip this batch file

for /f "delims=" %%a in ("dir /b /a-d ^|findstr /v "^[0-9]*-[0-9]*-[0-9]*_[0-9]*-[0-9]*-[0-9]*" ") do if /i not "%%a"=="%~nx0" ren "%%a" "%fullstamp% - %%a"

pause