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