2012-07-31 86 views
3

我已經創建了一個批處理文件,該文件定期從自動作業中觸發。設置批處理文件變量如果時間在指定的時間段

在批處理文件中,我想檢查時間是否在12AM和8AM之間,用特定值設置變量,否則將其設置爲默認值。

任何提示我怎麼可能在批處理文件中做到這一點?

回答

5
for /f "delims=:." %%T in ("%time%") do if %%T lss 08 (set var=someValue) else (set var=default) 

編輯 - zb226是正確的 - 上面是複雜得多,需要的話。更簡單的做

if %time:~0,2% lss 08 (set var=someValue) else (set var=default) 

在08年的領先0是至關重要的。原因是前面有0的數字被視爲八進制符號,8和9不是有效的八進制數字。如果IF語句在任一側看到無效的八進制數字,它將進行字符串比較。因此,如果當前小時爲09,則09 lss 8爲TRUE,因爲0在8之前排序。更改爲09 lss 08會給出正確答案。

如果上面的解決方案恰好是8:00:00.00 AM,則將上述任一解決方案設置爲默認值。如果您確實希望在上午8:00到00:00之間使用「特定值」,並且之後的時間是默認值,那麼它會更復雜一些。在這種情況下,我會回到FOR解決方案。

for /f "tokens=1-4 delims=:." %%A in ("%time%") do (
    set var=default 
    if %%A lss 08 set var=someValue 
    if %%A%%B%%C%%D equ 08000000 set var=someValue 
) 
5

我看到這已經被回答,但解決方案似乎對我來說是不必要的複雜。另外,一些額外的解釋可能會派上用場去理解解決方案。

您可以通過使用%TIME%訪問當前時間在批處理文件:

C:\>echo %TIME% 
18:01:52,64 

您可以使用以下語法訪問%TIME%一個子(或任何其他變量,對於這個問題):

C:\>echo %TIME:~0,2% 
18 

因此,有條件地設置爲你所描述的變量,你會怎麼做:

IF %TIME:~0,2% LSS 08 (SET VAR=particularValue) ELSE (SET VAR=defaultValue) 

編輯:在@dbenham的幫助下更正瞭解決方案 - 查看他的回答和評論,以查看我最初的嘗試出了什麼問題。

+1

你是正確的,沒有需要,更容易使用子字符串,如你所建議的。但是,由於約定前綴0的數字被解釋爲八進制符號,因此您的答案不會按書面方式工作。你的回答需要在8之前的0來強制字符串比較。 – dbenham 2012-07-31 16:58:18

+0

呃,我剛剛看到掛在那裏的「ms-dos」標籤。如果你真的在MS-DOS上運行,這會變得更加困難,並且由於缺少這樣一臺機器,我無法提供幫助。也許[這篇文章有幫助](http://www.robvanderwoude.com/datetime.php#Prompt),它有一個關於使用'PROMPT'命令的MS-DOS日期/時間處理部分。 – zb226 2012-07-31 16:58:54

+0

@dbenham:我站好了。謝謝,這很好理解。我已經用兩位數字進行了測試,因爲我們已經在一天之內完成了 - 編輯。對不起,作爲一個新手,我還不能支持任何東西。 – zb226 2012-07-31 17:09:38

相關問題