/ / Plik wsadowy, aby zmienić nazwę wszystkich plików w folderze poprzez dodanie bieżącej daty / godziny na początku nazwy pliku - data, godzina, plik wsadowy, zmiana nazwy

Plik wsadowy do zmiany nazwy wszystkich plików w folderze poprzez dodanie bieżącej daty / godziny do początku nazwy pliku - data, godzina, plik wsadowy, zmiana nazwy

Wydaje się, że nie rozumiem, w jaki sposób pliki wsadowe dodają rrrr / mo / dd / hh / mm / ss na początku nazw plików. (W systemie Windows 7) Ważna jest dokładność co do sekundy.

W rzeczywistości nie musi to być plik wsadowy, po prostu musi to być mały program, który może zostać uruchomiony przez Directory Monitor za każdym razem, gdy dodam pliki do folderu: http://brutaldev.com/page/Directory-Monitor.aspx Wyobrażam sobie tylko, że plik wsadowy byłby najprostszym i najbardziej wydajnym podejściem, ale wszelkie inne sugestie są mile widziane.

Pracuję z wieloma numerowanymi sekwencyjnie plikami z rozszerzeniemnakładające się nazwy plików i potrzebuję szybkiego sposobu na zmianę ich nazwy za każdym razem, gdy dodam je do folderu, tak aby nigdy nie było żadnego pliku o tej samej nazwie, ale nadal pozostaną w kolejności sekwencyjnej. Tak pomyślałem o dodaniu bieżącej daty i godziny na początku nazwy pliku i dlaczego sekundy są ważne, ponieważ mogę łatwo dodać wiele zestawów do folderu w mniej niż minutę, ale na pewno nie w sekundę. Byłoby idealnie, gdyby plik wsadowy mógł zignorować rozszerzenia plików i po prostu dodać bieżącą datę / godzinę na początku każdego pliku dodanego do folderu.

Odpowiedzi:

0 dla odpowiedzi № 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%"

To wydaje się działać dla mnie


0 dla odpowiedzi nr 2

Wolę rozwiązania, które nie są zależne od lokalnych ustawień (wmic podaje zawsze ten sam format):

@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 dla odpowiedzi № 3

Pierwsze cztery linie tego kodu dadzą Ci wiarygodne zmienne YY DD MM YYYY HH Min Sec w XP Pro i wyższych.

@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