バッチファイルがファイル名の先頭にyyyy / mo / dd / hh / mm / ssを追加する方法を理解できないようです。(Windows7を使用)2番目の精度が重要です。
実際にはバッチファイルである必要はありません。フォルダにファイルを追加するたびにDirectoryMonitorで実行できる小さなプログラムである必要があります。 http://brutaldev.com/page/Directory-Monitor.aspx バッチファイルが最も単純で最も効率的なアプローチになると思いますが、他の提案は大歓迎です。
私は多くの連番のファイルを扱いますファイル名が重複しているため、同じ名前のファイルが存在しないようにフォルダに追加するたびに名前を変更する簡単な方法が必要ですが、それらは順番に残ります。これは、ファイル名の先頭に現在の日付と時刻を追加することを考えた方法であり、秒が重要である理由です。1分以内に複数のセットをフォルダーに簡単に追加できますが、1秒未満ではありません。バッチファイルがファイル拡張子を無視し、フォルダに追加されたファイルの先頭に現在の日付/時刻を追加することができれば理想的です。
回答:
回答№1は0 @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%"
これは私のために働くようです
回答№2の場合は0
ローカル設定に依存しないソリューションをお勧めします(wmicは常に同じ形式を提供します):
@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
)
回答№3の場合は0
このコードの最初の4行は、XP Pro以上の信頼できるYY DD MM YYYY HH Min Sec変数を提供します。
@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