iT邦幫忙

0

批次檔__如何計算某天是屬於該年度的那週數

請問各位大大有關於批次檔的問題
想要透過批次檔每週固定一個時間點
進行遠端server 的資料複製的作業
而遠端server已經有建立以週別的格式的資料夾
我是想將這週資料夾內之檔案複製到我本機端來
例如:
遠端server D槽下有 2010-01, 2010-02.....2010-33 這樣的子資料夾
本機端每週要將當週資料夾內的檔案複製過來, 如本週是2010年第33週,
我需要將 D:\2010-33\aa.doc D:\2010-33\bb.doc 這兩個檔案複製
到我本機的D槽內(D:\log). 現在小弟就是卡在如何運算出33週....
是怎樣計算出來, 不知各位大大有何建議或是範例可以提供, 謝謝.

10
misadm
iT邦高手 10 級 ‧ 2010-08-16 10:01:42
最佳解答

換個角度想,你要複製當週的資料夾,就等於是最新的資料夾,所以,可以利用下列方式(不需要加裝任何工具):

<pre class="c" name="code">@echo off
dir \\Server\D$\????-??. /tc /od /b > %TEMP%\DirList.txt
for /F "tokens=1 delims=." %%i in (%TEMP%\DirList.txt) do (set NEW_DIR=%%i)
xcopy \\Server\D$\%NEW_DIR%\aa.doc D:\log\ /V
xcopy \\Server\D$\%NEW_DIR%\bb.doc D:\log\ /V
set NEW_DIR=
del %TEMP%\DirList.txt

第2行
列出你 Server 下,符合 ????-??. 的資料夾,並將結果存到**系統暫存資料夾(%TEMP%)**中的 DirList.txt 中。

一般資料夾都不會去設副檔名,多加一個小數點是為了增加搜尋出來的精確度。如果 Server 下,只有這些資料夾,你也可以直接下 *. 即可。

另外,tc 是要求顯示資料夾建立日期,od 是要求以顯示的日期做昇冪排序,b 是只顯示檔名。雖然最後只會顯示檔名,但是 tc 參數還是要加,不然會變成資料夾都修改日期。

第3行
此時 DirList.txt 所存的資料是依照資料夾建立日期存放(最新的在最下面)所以我們可以透過 for 迴圈,逐筆讀出,等回圈執行完畢,自然只會留下最新的一筆紀錄(放在 NEW_DIR 自定變數中)。

第4, 5行:複製你要的檔案, /V 會驗證新增的檔案。

第6行:刪除自定變數

第7行:刪除 DirList.txt 檔。

我目前有很多批次檔都是這樣做的,給你參考一下,若有疑問,可以互相討論。

10
shunyuan
iT邦研究生 1 級 ‧ 2010-08-13 11:25:51

這個問題好難啊,這個跟鐵板神算一樣。

sailsolitary iT邦研究生 2 級 ‧ 2010-08-13 13:59:34 檢舉

我也是百思不解 ~ 正在等神人出現 0..0

14
逮丸逮丸
iT邦大師 1 級 ‧ 2010-08-13 11:53:17

在 *nix 環境下只要 date +%U 就算出當日是當年的第幾週。
windows 上 可下載:
UnxUtils
把壓縮檔中的 usr/local/wbin 裡的 date.exe 複製到指定的目錄,
例如 C:\scripts\date.exe +%U 就會算出是第幾週,
看怎麼把這執行結果指定成批次檔中的變數。

sailsolitary iT邦研究生 2 級 ‧ 2010-08-13 14:55:00 檢舉

好方法, 只是缺點是還要下載程式, 不過這隻 date.exe 的程式功能強大啊~~~

raytracy iT邦大神 1 級 ‧ 2010-08-13 15:02:50 檢舉

我本來想推薦 Cygwin 的, 只是 Cygwin 在中文檔名的處理方面會有些問題, 我不太敢推給新手用; 沒想到 twtw 推薦的這套好像更精簡一點, 裡面還有 awk, find, grep...這些好用的東西, 使用起來也比 Cygwin 方便許多, 可惜只附了 zsh, 要是有 bash 就更好了....

sula3065408 iT邦研究生 1 級 ‧ 2010-08-16 18:27:38 檢舉

在文字模式底下還是*nix好用

12
SunAllen
iT邦高手 1 級 ‧ 2010-08-13 14:17:39

這我之前也遇到...後來就從每週改為每天...放棄用每週的方式來備份了

12
chiiren
iT邦新手 3 級 ‧ 2010-08-13 16:08:41

我個人都是用 AutoIt這個軟體來作
這個軟體是免費的,而且功能還蠻強大的
它裡面的只要打_WeekNumberISO(),這樣就可以算得出來了

14
taylorchen
iT邦新手 3 級 ‧ 2010-08-14 09:00:13

在 MS powershell 2.0後提供的 "Get-Date" 應該可以解決你的需求
下面的連結中有提供使用說明及使用範例

http://technet.microsoft.com/en-us/library/dd347647.aspx

12
zcm
iT邦新手 1 級 ‧ 2010-08-16 12:54:54

linyt提到:
行遠端server 的資料複製的作業

我想利用 script 來撰寫批次檔在 windows 中執行應該是可行的方法
以下這段 script 應該符合您的需求.

------------- WCOPY.VBS -------------
Dim fso, y
Set fso = CreateObject("Scripting.FileSystemObject")
y = cStr(Year(now()))
WeekOfYear = cStr(DatePart("ww",now()) -1)
'如果長度為1, 表示是1..9故前面要加上"0"
if len(WeekOfYear) = 1 then WeekOfYear = "0" + WeekOfYear
PathStr = "d:\" + y + "-" + WeekOfYear + "\"
fso.CopyFile pathstr + "aa.doc", "d:\log\"
fso.CopyFile pathstr + "bb.doc" , "d:\log\"


我要發表回答

立即登入回答