請問各位大大有關於批次檔的問題
想要透過批次檔每週固定一個時間點
進行遠端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週....
是怎樣計算出來, 不知各位大大有何建議或是範例可以提供, 謝謝.
換個角度想,你要複製當週的資料夾,就等於是最新的資料夾,所以,可以利用下列方式(不需要加裝任何工具):
<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 檔。
我目前有很多批次檔都是這樣做的,給你參考一下,若有疑問,可以互相討論。
在 *nix 環境下只要 date +%U 就算出當日是當年的第幾週。
windows 上 可下載:
UnxUtils
把壓縮檔中的 usr/local/wbin 裡的 date.exe 複製到指定的目錄,
例如 C:\scripts\date.exe +%U 就會算出是第幾週,
看怎麼把這執行結果指定成批次檔中的變數。
我個人都是用 AutoIt這個軟體來作
這個軟體是免費的,而且功能還蠻強大的
它裡面的只要打_WeekNumberISO(),這樣就可以算得出來了
在 MS powershell 2.0後提供的 "Get-Date" 應該可以解決你的需求
下面的連結中有提供使用說明及使用範例
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\"