windows bat系列7:for處理案例二 產生等差序列

那個少年發表於2018-07-05

1.    for幫助原型

FOR /L %variable IN (start,step,end) DO command [command-parameters]
    該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列
    1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)

2.    一個案例程式碼

需求說明:

    假設需要設計定時任務(schedule task),每隔一段時間將某個目錄下的檔案傳送到遠端機器,然後刪除目錄下的所有檔案,目錄下的檔案由其他任務產生。此案例指令碼就是模擬檔案的產生,通過for迴圈產生等差序列來區分不同的檔案

@echo off
Rem close echo

chcp 437>nul
setlocal enabledelayedexpansion

Rem set parameters
set TIME_HOUR=!time:~0,2!
set TIME_MIN=!time:~3,2!
set SYS_TIME=%TIME_HOUR%_%TIME_MIN%

Rem enter script's path
pushd %~dp0

Rem create file
for /L %%i in (1,1,5) do (
	set tmpfile=%SYS_TIME%_tempfile_%%i.txt
	echo This is a temp file, seq is %%i >!tmpfile!
)
popd

endlocal

pause

         程式的主要功能已經加了註釋,相信大家都能理解。主要說明以下幾點:

   a. 對當前時間進行字串擷取後拼裝

set TIME_HOUR=!time:~0,2!
set TIME_MIN=!time:~3,2!
set SYS_TIME=%TIME_HOUR%_%TIME_MIN%

目的是為了區別不同時間的檔案,因為前面需求說了:此指令碼可能被定時任務所呼叫

   b. pushd/popd表示將路徑壓棧並進入路徑,這樣產生的檔案就在指令碼的同級目錄,因為我沒有拼接檔案的完整路徑

   c. for /L產生等差序列。其中for迴圈體中根據時間和序列號拼接了檔名,並用echo的重定向向檔案寫入了一行文字

3.    效果圖


相關文章