pCloud Partner Program

如何取得磁碟分割的叢集大小

系統技術/Windows 2010/04/06 14:02
views: 179997 times
一般在格式化磁碟(應該說分割區-partition)時, 有個選項可以設定, 就是叢集大小.

但是指定完成後, 要查詢, 卻不是那麼容易. 可以利用 chkdsk 指定來達成 (http://support.microsoft.com/kb/245436/en-us/), 但是總會需要到檢查一段依磁碟大小愈大而愈久的檢查, 有沒有辦法有更直接的方法?

若是在 NTFS 分割區時, 可以利用指令來達成:

fsutil fsinfo ntfsinfo c:

結果如下:

NTFS Volume Serial Number :       0x3accf140ccf0f74b
Version :                         3.1
Number Sectors :                  0x0000000009c41ad7
Total Clusters :                  0x000000000138835a
Free Clusters  :                  0x0000000000c9dd73
Total Reserved :                  0x0000000000000060
Bytes Per Sector  :               512
Bytes Per Cluster :               4096
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length :           0x0000000008c64000
Mft Start Lcn  :                  0x00000000000c0000
Mft2 Start Lcn :                  0x00000000009c41ad
Mft Zone Start :                  0x0000000000e2a2c0
Mft Zone End   :                  0x00000000010926e0

但是這個僅適用於 NTFS, 若是 FAT32 的話呢? 再找看看其他的方式, 可以利用 WMI 來達成, 如下: (以下是 VBScript)



這個是利用了 WMI , 使用DefragAnalysis 的功能, 來取出磁碟資訊的方式, 其中有 ClusterSize 的屬性(單位是 bytes), 可以做為檢查磁碟 ClusterSize 這個功能. 其中的 strDrive 就是要查詢的磁碟機代碼, 也可以讀取 FAT32 的磁碟分割, 十分方便, 速度也很快.

本文介紹的兩種方式, 可以依實際狀況來使用, 很方便.


參考資料:

微軟KB: http://support.microsoft.com/kb/245436/en-us/

http://www.vistax64.com/powershell/77645-getting-cluster-size-your-hard-disk.html

http://www.activexperts.com/activmonitor/windowsmanagement/scripts/storage/diskdrives/physical/#AVD.htm

http://www.scribd.com/doc/15490968/Windows-Server-Cookbook-by-OReilly-Media (這本書的108頁)

http://msdn.microsoft.com/en-us/library/aa389827%28VS.85%29.aspx

top

13號星期五的機率

程式技術 2009/02/13 17:04
views: 69294 times
今天是 2009/2/13 的 13號星期五, 13號星期五, 也是黑色星期五, 印象中, 應該一年平均會有兩次, 不過為了驗證這件事, 我們利用 vbs 寫個小程式來驗證一下就知道了..

這裡會用到的重要 vbs 函數有兩個 DateSerial 及 WeekDay 這兩個, 程式碼如下:



計算西元1年至2000年的13號星期五有幾次, 來平均一下應該就很公平了吧.. 這樣計算出來的結果是 3439 次, 平均下來就是 1.7195 次 (3439 / 2000) 這樣就和印象中的 13號星期五的機會很接近了. (若用 3000年來算是 1.7196 次 (5159 / 3000), 9000年來算是 1.7198 (15479 / 9000))

再來列出最近10年的 13號星期五:
2001/4/13 2001/7/13
2002/9/13 2002/12/13 2003/6/13
2004/2/13 2004/8/13
2005/5/13 2006/1/13
2006/10/13 2007/4/13
2007/7/13
2008/6/13
2009/2/13 2009/3/13 2009/11/13
2010/8/13

很有趣的, 今年吃掉了2007, 2008, 2010 三年的 quota 耶, 哈哈..

相關討論:
一年中最多有幾個黑色星期五?最少有幾個黑色星期五?
上面文章內, 即使碰到閏年的 2月 29日, 算出的結果仍是介於1~3日之間, 所以也不會有超過3日或少於1日的沒有13號星期五的日子.

[2017/10/13 10:16]
補上 codepen 的 javascript 程式碼結果.

See the Pen BlackFriday by Timothy Huang (@timhuang) on CodePen.


top
TAG 13th, Friday, vbs

RegExp物件的group元素取出方式

程式技術/ASP 2008/10/23 17:29
views: 102654 times
真的很妙......

這篇是要說明 RegExp 在 VBScript (WShell, ASP皆同) 內使用的狀況, 今天正在解決一個解析指令的語法, 想說利用 Regulare Expression 這個好物來處理一下, 結果真是令人不開心啊. 因為查了半天 msdn, 都沒有找到將 group 元素取出的方式, 所以整個就是失落(因為明明就應該是有方法可以取出來才對). 查到的文件在這裡:
http://msdn.microsoft.com/en-us/library/ms974570.aspx

想說怎麼會沒有這個語法呢? 真的是太奇怪了. 於是再到 google 另外查了一下, 發現其實還有個 SubMatches 的 collection 啦, 原來如此, 這個才是真的拿到 group 元素的方式, 想來真的是自己沒有仔細查找清楚, 只能再做個筆記自己記錄一下.

msdn 其實是有資料的, 在這裡:
http://msdn.microsoft.com/en-us/library/y27d2s18(VS.85).aspx

好地, 回到主題, 簡單地說, 今天原來要做的需求很單純, 就是將一個控制指令中的各項參數取出, 如下:

control_[series]_batch_[bno]_target_[tno]_end

這樣的一個字串, 將其中的 [series], [bno], [tno] 取出來, for example, 像是這樣的一個指令:

control_276324_batch_23_target_14_end

要將其中的 276324 及 23 及 14 取出, 若是用 parse 的方式比較麻煩, 就是一個一個比對下去, 但用 RegExp 就方便了, 既能檢查 pattern, 又可以將參數一次取出, 一舉兩得, 接下來就著手來作業了, 程式碼如下:



若是指令(strCmd)是多組, 也可以一次都處理完成, 利用 objMatches(i) 來取得, 不過就是要將 objReg.Global 設為 True 就是了.

這樣就可以一口氣將 series, bno, tno 全數取得, 一方面檢查看指令是否符合 pattern, 一方面又可以將所需要的參數取出, 豈不快哉!?


top

VBS中執行外部程式取得Console上的結果

程式技術 2007/08/07 10:33
views: 128851 times
在windows平台下, 透過 vbs 我們可以很容易地撰寫一些 script 做為應用程式間的連結及整合, 雖然 vbs 的效能不好, 不過透過 vbs 進行整合各外部程式及連結資料庫的讀寫是十分方便容易的.

往往在呼叫外部程式時, 我們需要取得該程式的回傳結果, 並進一步解析(parse)以取得結果的內容來處理後續要進行的作業, 所以如何取得外部程式的執行結果, 就是本篇文章要介紹的內容.

在 vbs 中一般我們要執行外部程式並等待執行完成可以透過 WScript.Shell (WshShell) 物件的 Run 方法, 例如:



其中 5 只是以目前的位置及大小呈現, 後面的 true 則是等待執行的結果, 而 ret 就取得程式的執行結果 (error code)

但若是要取得像 ipconfig 這樣指令的結果 (輸出在 console 上的), 則必須使用 Exec 方法, 但 Exec 方法並沒有等待的呼叫方式, 所以必須自行利用該方法的回傳物件 WshScriptExec 的 Staus 屬性來進行判斷是否執行結束(0為執行中, 1為執行結束), 而我們所要取得程式的執行結果, 則是利用該 WshScriptExec 物件的 StdOut 來取得, 由於該 StdOut 為 TextStream, 所以我們若要整個取出, 就使用 ReadAll 方法即可, 程式如下:



Run 方法參考: http://msdn2.microsoft.com/en-us/library/d5fk67ky.aspx
Exec 方法參考: http://msdn2.microsoft.com/en-us/library/ateytk4a.aspx

top

使用vbs產生文字檔

程式技術 2007/01/05 14:16
views: 88882 times
有時候, 我們需要一組連續流水號的文字檔, 例如從 36~420 號, 每行一個數字, 通常會寫程式的人就開始用手邊的工具, 如 delphi, vc++, vb, asp 等程式語言來實作了, 但最快速最簡便的方法就是利用 excel 的自動編號(哇咧, 那和這篇主題有什麼關係), 呃....

當然是必須有安裝這些程式語言(delphi, vc++, vb....)及這些程式(excel)才能實作出來, 然而內建在 windows 內最方便的工具就是 vbs, 僅需要單純的幾行, 就可滿足囉, 而且還可以利用 console 下的輸出導向來進行檔案的輸出, 先寫個簡單的上面例子來看看:

for i=36 to 420
   WScript.Echo i
next

more..


top




DJI Tello 小米萬能遙控器 手機App操控
Microsoft Office 365 中文家用版PKC (無光碟) ASUS華碩 AC1900 雙頻無線路由器 RT-AC68U
美國 VORNADO 533 渦流空氣循環機 (黑色) 御茶園 每朝健康綠茶(650mlx24入)
每朝健康 雙纖綠茶(650mlx24入)


 Waiting...