42

ファイルを出力するバッチスクリプトがあり、スクリプトが実行されるたびに既存のファイルが上書きされないようにしようとしているので、タイムスタンプを付けようとしています。

現在、私はこれを持っています:

set  stamp=%DATE:/=-%_%TIME::=-%

しかし、時刻が午前 1 時から午前 9 時までの場合は、次のようになります。

13-06-2012_ instead of a full 13-06-2012_12-39-37.28

どうすればこれを修正できますか?

私は Windows 7 を使用してecho %date% %time%おり、コマンド ライン ウィンドウでの出力は次のとおりです (「短い日付」の時計形式は 3 文字の月を表示するように設定されています)。

03-Sep-12 9:06:21.54

基本的に、クロック形式の設定に関係なく、問題を解決するソリューションが必要です。


編集:誰もタイトルを超えて読むのが好きではないので、この質問は切り捨ての問題に関するものであると明示的に述べます. そして、私は解決策を見つけました。

しばらくの間、次のタイムスタンプを使用してきましたが、うまく機能しています。

set timestamp=%DATE:/=-%_%TIME::=-%
set timestamp=%timestamp: =%

のようなタイムスタンプを生成し18-03-2013_13-37-43.26ました: 空白は、私の最初の質問の問題でした。/:%TIME%%DATE%

4

9 に答える 9

64

このコードの最初の 4 行は、WMIC を使用して、信頼できる YY DD MM YYYY HH Min Sec 変数を XP Pro 以降で提供します。

@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%"
pause

出力例:

datestamp: "20200828"
timestamp: "085513"
fullstamp: "2020-08-28_08-55-13"
Press any key to continue . . .
于 2014-05-05T15:33:24.540 に答える
13

ファイル名で使用するのに適した形式で、Windowsコマンドラインで現在の日時を取得する方法は、スタックオーバーフローの質問を参照してください。.

ファイルを作成しますdate.bat

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a-%%b-%%c)
set mytime=%mytime: =% 
echo %mydate%_%mytime%

実行date.bat:

C:\>date.bat
2012-06-14_12-47-PM

アップデート:

次のように 1 行で実行することもできます。

for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g

于 2012-06-14T17:00:46.220 に答える
5

タイムスタンプを返すために作成したバッチ スクリプトを次に示します。オプションの最初の引数を指定して、フィールド区切り文字として使用できます。例えば:

c:\sys\tmp>timestamp.bat
20160404_144741
c:\sys\tmp>timestamp.bat -
2016-04-04_14-45-25
c:\sys\tmp>timestamp.bat :
2016:04:04_14:45: 29

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: put your desired field delimiter here.
:: for example, setting DELIMITER to a hyphen will separate fields like so:
:: yyyy-MM-dd_hh-mm-ss
::
:: setting DELIMITER to nothing will output like so:
:: yyyyMMdd_hhmmss
::
SET DELIMITER=%1

SET DATESTRING=%date:~-4,4%%DELIMITER%%date:~-7,2%%DELIMITER%%date:~-10,2%
SET TIMESTRING=%TIME%
::TRIM OFF the LAST 3 characters of TIMESTRING, which is the decimal point and hundredths of a second
set TIMESTRING=%TIMESTRING:~0,-3%

:: Replace colons from TIMESTRING with DELIMITER
SET TIMESTRING=%TIMESTRING::=!DELIMITER!%

:: if there is a preceeding space substitute with a zero
echo %DATESTRING%_%TIMESTRING: =0%
于 2016-04-04T18:49:26.813 に答える
3
for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time: =0%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g
echo %DateNtime%

または、コマンドラインから:

for /f "tokens=2-8 delims=.:/ " %a in ("%date% %time: =0%") do echo %c-%a-%b_%d-%e-%f.%g 

編集:ブライスの非標準の時間/日付の仕様に従って。(03-Sep-12 9:06:21.54

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-7 delims=.:/- " %%a in ("%date% %time%") do (
  if "%%b"=="Jan" set MM=01
  if "%%b"=="Feb" set MM=02
  if "%%b"=="Mar" set MM=03
  if "%%b"=="Apr" set MM=04
  if "%%b"=="May" set MM=05
  if "%%b"=="Jun" set MM=06
  if "%%b"=="Jul" set MM=07
  if "%%b"=="Aug" set MM=08
  if "%%b"=="Sep" set MM=09
  if "%%b"=="Oct" set MM=10
  if "%%b"=="Nov" set MM=11
  if "%%b"=="Dec" set MM=12
  set HH=0%%d
  set HH=!HH:~-2!
  echo 20%%c-!MM!-%%a_!HH!-%%e-%%f.%%g
)
endlocal
于 2012-08-29T16:15:15.643 に答える
1

Stack Overflow の質問 Creation a file name as a timestamp in a batch jobへの回答のおかげで、ファイル名を終了するスペースであることがわかりました。

于 2012-06-14T17:57:24.960 に答える
0

以前は、インターネットで見つけた .cmd スクリプトを使用していました。ローカリゼーションが通常日付を台無しにする方法が嫌いです。ファイル名に日付が含まれている場合はいつでも(大胆に言うと、他の場所でも)、ISO 8601形式で日付が必要になると思います。

2015-02-19T14:54:51Z

または、その順序で YMDHM を持つ他のもの、

2015-02-19 14:54

これは、MDY / DMY のあいまいさが修正され、テキストとしてソートできるためです。

その .cmd スクリプトをどこで入手したかはわかりませんが、http: //ss64.com/nt/syntax-getdate.html であった可能性があり、YYYY-MM-DD Windows 8.1 および M /D/YYYY Windows 7 のバニラ インストール。どちらも同じ形式を示します。

2015-02-09 04:43

于 2015-02-09T09:53:35.273 に答える
0

DD-MM-YYYY_HH-MM-SS.TTTT がティックであるフルタイムが必要です。例外はそれをすべて言います。

于 2012-06-14T16:57:05.160 に答える