簡體   English   中英

Windows CMD 批處理腳本中的文件名時間戳被截斷

[英]Filename timestamp in Windows CMD batch script getting truncated

我有一個輸出文件的批處理腳本,我試圖確保每次執行該腳本時,都不會覆蓋現有文件,因此我試圖在其上放置時間戳。

目前我有這個:

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% ,然后剝離空白。 空格確實是我最初問題中的問題。

此代碼的前四行將使用 WMIC 在 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%"
pause

輸出示例:

datestamp: "20200828"
timestamp: "085513"
fullstamp: "2020-08-28_08-55-13"
Press any key to continue . . .

請參閱 Stack Overflow 問題如何以適合在文件名中使用的格式在 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

更新:

你也可以用這樣的一行來做到這一點:

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

這是我為返回時間戳而制作的批處理腳本。 可以提供可選的第一個參數以用作字段定界符。 例如:

c:\sys\tmp>時間戳.bat
20160404_144741
c:\sys\tmp>timestamp.bat -
2016-04-04_14-45-25
c:\sys\tmp>時間戳.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%
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

感謝Stack Overflow quesion Creating a file name as a timestamp in a batch job的答案,我發現它是一個終止文件名的空格。

2018-02-08_14.32.06.34.log 格式的 Windows 批處理日志文件名:

setlocal
set d=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%
set t=%time::=.% 
set t=%t: =%
set logfile="%d%_%t%.log"

ping localhost -n 11>%1/%logfile%
endlocal

DD-MM-YYYY_HH-MM-SS.TT中的完整時間,其中 TT 是刻度。 異常說明了一切。

過去,我使用在 Internet 上找到的 a.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

BATCH/CMD 文件,如DateAndTime.cmd不在 CMD-Console 中

代碼:

SETLOCAL EnableDelayedExpansion
(set d=%date:~8,2%-%date:~3,2%-%date:~0,2%) & (set t=%time::=.%) & (set t=!t: =0!) & (set STAMP=!d!__!t!)

創建輸出:

echo %stamp%

輸出:

2020-02-25__08.43.38.90

或者也可能在 CMD-Console 和 BATCH/CMD 文件中的行中

set d=%date:~6,4%-%date:~3,2%-%date:~0,2%
set t=%time::=.%
set t=%t: =0%
set stamp=%d%__%t%

“創建輸出”和“輸出”同上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM