2010-04-19 17 views
6

Tập tin Bat để gọi A.bat nếu thời gian ít hơn 19:45 và gọi B.bat nếu thời gian lớn hơn 19:45 (tôi không thể sử dụng Windows Task Scheduler trong trường hợp này vì tôi có cài đặt làm cho trình quản lý tải xuống của tôi kích hoạt tệp bat gốc này mỗi lần tải tệp xuống thông qua trình quản lý tải xuống này)Tập tin Bat để gọi A.bat nếu thời gian ít hơn 19:45 và gọi B.bat nếu thời gian lớn hơn 19:45

Trả lời

1

Cách sử dụng Windows Task Scheduler?

+0

Tôi không thể sử dụng cửa sổ tác vụ sheduler trong trường hợp này vì tôi có cài đặt làm cho trình quản lý tải xuống của tôi kích hoạt tệp bat gốc này mỗi khi tệp được tải xuống thông qua trình quản lý tải xuống này – dhiraj05

9

Bạn có thể sử dụng đoạn mã sau làm cơ sở (bạn có thể sử dụng bat file nhưng tôi thích cmd như một phần mở rộng):

@echo off 
setlocal enableextensions enabledelayedexpansion 
set tm=%time% 
:: Test data on lines below. 
:: set tm=18:59:59.00 
:: set tm=19:00:00.00 
:: set tm=19:44:59.00 
:: set tm=19:45:00.00 
:: set tm=23:59:59.99 
set hh=!tm:~0,2! 
set mm=!tm:~3,2! 
if !hh! lss 19 (
    call a.cmd 
    goto :done 
) 
if !hh! equ 19 (
    if !mm! lss 45 (
     call a.cmd 
     goto :done 
    ) 
) 
call b.cmd 
:done 
endlocal 

Hãy ghi nhớ rằng %time% là định dạng tương tự như bạn nhận được từ các time lệnh và điều này có thể phụ thuộc vào ngôn ngữ. Định dạng tôi nhận được là 20:17:28.48 vào khoảng 8:15 tối nhưng kết quả của bạn có thể khác.

Nếu có, chỉ cần điều chỉnh đế khi đặt hhmm. Lệnh:

set mm=!tm:~3,2! 

bộ mm cho hai nhân vật của tm tại offset 3 (nơi offset 0 là ký tự đầu tiên).


Nếu bạn không phải là fan hâm mộ lớn của spaghetti mã, ngay cả trong hàng loạt, bạn cũng có thể sử dụng:

@echo off 
setlocal enableextensions enabledelayedexpansion 
set tm=%time% 
:: Test data on lines below. 
:: set tm=18:59:59.00 
:: set tm=19:00:00.00 
:: set tm=19:44:59.00 
:: set tm=19:45:00.00 
:: set tm=23:59:59.99 
set hh=!tm:~0,2! 
set mm=!tm:~3,2! 
if !hh! lss 19 (
    call a.cmd 
) else (
    if !hh! equ 19 if !mm! lss 45 (
     call a.cmd 
    ) else (
     call b.cmd 
    ) 
) 
endlocal 
+0

Chỉ tò mò: không có 'khác' trong Windows ngôn ngữ hàng loạt? –

+0

Không có 'hoặc' trong ngôn ngữ lô Windows? :) –

+2

@Adriano, nó không phải là thích nghi nhất của ngôn ngữ nhưng bạn _can_ làm một số điều: 'else' và' và' được hiển thị. Tôi thường mô phỏng 'hoặc' với nhiều' if 'thiết lập một cờ thì một' if' dựa trên lá cờ đó. Nguyên thủy nhưng, nếu công cụ duy nhất bạn có là hàm của voi ma mút, bạn không thể quá cầu kỳ :-) – paxdiablo

2

thời gian gần đây tôi đang làm một cái gì đó tương tự và giải pháp của tôi là một vòng lặp for - không amazingly nhỏ gọn nhưng có công việc làm:

for /f "tokens=1,2,3,4 delims=:,. " %%i in ("%time%") do (

echo Timegrab = %%i %%j %%k %%l 
set hr=%%i 
set mn=%%j 
set sc=%%k 
set ms=%%l 

) 

Sau đó, tất cả các bạn sẽ cần phải làm là một tuyên bố IF để kiểm tra xem% hr% là ít hơn 19% và mn% là ít hơn 45.

Các vấn đề liên quan