1. 程式人生 > >%date~0,4%和 %time~0,2%等用法詳解

%date~0,4%和 %time~0,2%等用法詳解

在windows中,有個原始並且功能強大的批處理,好像是被人遺忘了,比如博主最近在一個專案中就用到它,非常好用。今天就和博主一直來看看用批處理生動生成每日的資料夾。

為了能正確地生成每天的日期資料夾,請先將本機時間的短日期格式設定為yyyy-MM-dd。

 

然後就開始寫bat批處理檔案了,新建一個bat檔案,在裡面寫上:

@echo off
F:
CD dawn

set date=%date%
set "date=%date:/=-%"

if not exist %date% (  
    MD %date%  
)
::ECHO 目錄F:/dawn/dawn_fir/%date
%建立成功 ::PAUSE EXIT

這裡做了一個設定,將日期中的/替換成了-,

如果說想一開機就自動地生成對應的資料夾,就在計劃任務(taskschd.msc)中,將這個批處理檔案做成一個計劃任務即可。

 

比如在windowscmd命令列視窗執行date命令後這個環境變數的值為

當前日期:2014-09-01 星期六 或2014/09/01 週六

那麼如下的各個操作的意義如下:
%date:~0,4% 表示從左向右指標向右偏0位,然後從指標偏移到的位置開始提取4位字元,結果是2014(年的值)
%date:~5,2%  表示指標從左向右偏移5位,然後從偏移處開始提取2位字元,結果是03(月的值)
%date:~8,2%  表示指標從左向右偏移8位,然後從偏移處開始提取2位字元,結果是01(日的值)
%date:~5%    表示指標從左向右偏移5位,然後提取所有的值
%date:~-5%   表示指標反方向偏移,從最右端開始,偏移5位,然後從指標處提取左邊的所有數值。

注意:“2014-09-01星期六”是個字串,在計算機裡指標是從0開始計數的,所以這串字元的指標意義上的第5位是0,月份的0,取兩位剛好是03.

同理,比如當前系統的time變數的值如下:

當前時間: 11:36:56.63

那麼如下的各個操作的意義如下:
%time:~0,2%  表示從左向右指標向右偏0位,然後從指標偏移到的位置開始提取2位字元,結果是小時欄位數值
%time:~3,2%  表示指標從左向右偏移3位,然後從偏移處開始提取2位字元,結果是分鐘欄位數值
%time:~6,2%  表示指標從左向右偏移6位,然後從偏移處開始提取2位字元,結果是秒欄位數值
//建立時間命名的資料夾


md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

 

--------分析------------

從set /?中提取的有關幫助: 

    %PATH:str1=str2%
會擴充套件 PATH 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。
要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。
"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的
開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。


也可以為副檔名指定子字串。
    %PATH:~10,5% 
會擴充套件 PATH 環境變數,然後只使用在擴充套件結果中從第 11 個(偏 
移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設 
值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數, 
使用的數字則是環境變數數值長度加上指定的偏移量或長度。 
    %PATH:~-10% 
會提取 PATH 變數的最後十個字元。 
    %PATH:~0,-2% 
會提取 PATH 變數的所有字元,除了最後兩個。

 

----------------------------------

用%time:~0,2%%time:~3,2%%time:~6,2%時有個問題, 就是如果TIME 是00點的時候,電腦顯示的是0 不是00所以TIME 0~2 就報錯了。

例子:時間9:42:17

set fileDate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

for /f "tokens=1,2 delims=:" %%i in ('time/t') do set t=%%i%%j

set fileDate2=%date:~0,4%%date:~5,2%%date:~8,2%%t:~0,4%%time:~6,2%

echo fileDate:%fileDate%

echo fileDate2:%fileDate2%

fileDate:20150112 94217(9前面是空格)
fileDate2:20150112094217

還有些裝置的date顯示是12/12/2015 週一

所以用以下方法格式化

set date=%date:~0,10%
set date=%date:-=%   //去掉日期中的-
set date=%date:/=%   //去掉日期中的/
set time=%time:~0,8%
set time=%time::=%   //去掉時間中的:

if "%time:~0,1%"==" " set "time=0%time:~1%"


---------------------
作者:icanlove
來源:CSDN
原文:https://blog.csdn.net/icanlove/article/details/42640329
版權宣告:本文為博主原創文章,轉載請附上博文連結!