2009-04-24 12:31

Dos 下的目錄顯示(DIR)

顯示檔案清單以列出目錄中的檔案及子目錄。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

[drive:][path][filename]
 指定要顯示的磁碟機、目錄或檔案。

/?顯示參數說明。

/A依照指定的檔案屬性來顯示檔案。
attributesD 目錄
R 唯讀檔
H 隱藏檔
A 保存檔
S 系統檔案
- 無意義

/B使用單純格式 (沒有標頭資訊或摘要)。

/C顯示檔案大小千位數分隔符號。這是預設值。 使用 /-C 來停用分隔符號的顯示。

/D與寬的列表格式相同,但是依照欄來排序。

/L使用小寫顯示。

/N使用新的長列表格式,檔名會顯示在最右方。

/O依照指定的排序順序來列出檔案。
sortorderN 依名稱 (英文字母)
S 依大小 (最小的在前)
E 依副檔名 (英文字母)
D 依照日期與時間 (日期較早的在前)
G 先列出子目錄 - 表示相反的順序

/P當資料填滿整個螢幕時暫停顯示。

/Q顯示檔案擁有者。

/S顯示指定目錄及所有子目錄中的檔案。

/T指定用來顯示或排序的時間欄位
timefieldC 建立
A 上次檔案存取時間
W 上次寫入檔案時間

/W使用寬的列表格式。

/X顯示對非 8.3 格式的檔案產生的短檔名。這個格式和 /N 相同,但是短檔名會插入在長檔名之前。 如果沒有長檔名存在,該處會顯示空白。

/4顯示四位數的年份

參數可能會在 DIRCMD 環境變數預先設定。您可以在任何參數使用連字號字首(-)來覆蓋預先的設定--例如: /-W。


操作範例:

# 列出所有 D:\test 下的檔案與目錄
DIR D:\test /S /B
# print:
# D:\test\001.jpg
# D:\test\002.jpg
# D:\test\003.jpg
# D:\test\pics
# D:\test\pics\001.jpg
# D:\test\pics\002.jpg


# 列出當前目錄下的檔案與目錄,並將結果輸出至 D:\test\dir.txt
DIR /S /B >D:\test\dir.txt

# 將列出的結果加入至 D:\test\dir.txt 檔案後面
DIR /S /B >>D:\test\dir.txt


# 找出 D:\test 下的副檔名為 jpg 的檔案
DIR D:\test /S /B |FIND /I ".jpg"
# print:
# D:\test\001.jpg
# D:\test\002.jpg
# D:\test\003.jpg
# D:\test\pics\001.jpg
# D:\test\pics\002.jpg
2009-04-23 20:51

PhotoShop 實用教學-動作與批次處理

在 PhotoShop 中有個很實用的功能,那就是動作紀錄與批次處理,可能你對這個軟體不是很熟悉,但這個功能可以方便你在處理大量圖片,我最喜歡的就是這個功能完全的客製化,只要你會的功能通通都可以錄製個人的批次處理,好處就是只要這套軟體就可以處理很多事。


PhotoShop 實用教學-動作與批次處理
廢話那麼多,我用一個為圖片加上個人標註的範例來說明好了。


PhotoShop 實用教學-動作與批次處理
首先開啟一個圖檔,並點選動作視窗。


PhotoShop 實用教學-動作與批次處理
按下動作視窗中的建立新增動作


PhotoShop 實用教學-動作與批次處理
取一個適合的名稱,以免以後忘記當初做的事。
這裡還可以為此動作設立快捷鍵,在平時編輯圖片上也是蠻方便的。


PhotoShop 實用教學-動作與批次處理
這裡要注意錄製的按鈕是否按下,在一開始都會預設啟動,為了保險起見來是注意一下,以免等一下都白做了。


PhotoShop 實用教學-動作與批次處理
一開始先選取影像尺寸調整圖片的解析度,這也是最重要的事。
因為在不同的解析度下,編輯單位會大大的受影響,免得最後做出來的動作不通用,為了方便通用性,建議先規定圖片的大小跟解析度。


PhotoShop 實用教學-動作與批次處理
這裡建議固定寬度與高度,只調整圖片的解析度至網頁用的 72 dpi


PhotoShop 實用教學-動作與批次處理
為產生上下所需要的高度,選擇調整版面尺寸


PhotoShop 實用教學-動作與批次處理
以相對方式為上下各增加 30 px,這裡的高度就依個人需要而定了,沒有特別限制,最後會為寬高都增加至 40 px。


PhotoShop 實用教學-動作與批次處理
選擇文字工具。


PhotoShop 實用教學-動作與批次處理
這裡要特別注意,文字定位是採用 % 來計算的,盡可能讓文字的 X Y 值壓在最邊界上,為了通用性的考量,我想沒有人願意接受非預期的效果,所以這裡要特別注意。


PhotoShop 實用教學-動作與批次處理
你可以在動作紀錄中發現文字處理上所記錄的事項,這裡很明顯的看到文字的定位單位(%)


PhotoShop 實用教學-動作與批次處理
再來選取版面尺寸增加剩下的高度與寬度。


PhotoShop 實用教學-動作與批次處理
為寬度增加 40 px 及高度 10 px。


PhotoShop 實用教學-動作與批次處理
最後做一的影像平面化


PhotoShop 實用教學-動作與批次處理
最後點選停止紀錄
到這裡動作的錄製就算完成了,你可以嘗試的按下旁邊的播放扭,就可以發覺剛剛錄製的效果了。


PhotoShop 實用教學-動作與批次處理
接下就要將錄製好的動作轉存批次處理的程序檔
在上一個選項批次處理可以快速的將錄製的動作直接使用,但為了讓批次處理可以更方便,也為了讓這個動作可以好好的保存,我建議製作成程序檔,雖然程序檔不可以再改寫及察看。


PhotoShop 實用教學-動作與批次處理
選擇程序檔(.exe)要存放的位置,當然最好還是取一個好一點的名稱,要不然到時候又忘記是做什麼用的,那今天的努力又白費了。


PhotoShop 實用教學-動作與批次處理
選擇剛剛錄製好的動作,當然你也可以選擇其他預設的動作。


PhotoShop 實用教學-動作與批次處理
選擇儲存的方式,這裡我選擇直接覆蓋原始圖片的方式,當然也可以另存至其他目錄。
這裡要記得勾選上面兩個選項,『包括全部的次當案夾』可以讓選取目錄下所有的圖檔,都套用此批次處理,這樣在批次套用上會很方便,『抑制色彩描述警告』如果你不想再批次處理的過程中,一直點選討厭的對話匡的話,最好勾選此選項。


PhotoShop 實用教學-動作與批次處理
你可以利用文件管理,將圖檔或目錄拖放至程序上,接下來就會套用批次處理中動作記錄。


當然也可以使用命令列去執行套用的動作,建議使用目錄當作參數,在處理大量圖片的時候會比較簡短。

E:\>著作權標示.exe E:\photo-test\001.jpg E:\photo-test\002.jpg

E:\>著作權標示.exe E:\photo-test\ss
2009-04-17 20:10

利用 switch 該善程式碼的閱讀性

一個簡單的網頁 Script 架構,不外乎一個進入點及一個輸出點,由上到下一個很單純的流程。

在資料驗證上也是一個接一個,但卻數量多的時候,卻會讓整體流程看起來很複雜,很不直覺。

一個基本 switch 的撰寫方法,用在代替有結構的 IF 時還蠻放便的。

<?php
switch ($_GET['type']) {
// 當 $_GET['type']=="apple" 時進入程式片段
case "apple":
//程式片段...
break;

// 當 $_GET['type']=="bar" 時進入程式片段
case "bar":
//程式片段...
break;

// 當以上都不符合,預設進入程式片段
default :
//程式片段...
break;
}
?>


這個例子,將判斷式移到 case 上,讓原本的 switch 更加彈性,但這不是主要目的,在 switch 裡主要的好處是可以利用 break 跳出流程,這樣的用法跟 function 很像,利用跳出的方式結束剩下的程序,在區塊中檢查到錯誤的數入參數時,直接丟出訊息並讓輸出程序去處理顯示的問題。

<?php
switch (true){
case ($_GET['type']=='view'):
//其他判斷或動作...
break;

case ($_GET['action']=='delete'):
//其他判斷或動作...
break;

case ($_GET['action']=='add'):
//標題檢查
$title=trim($_GET['title']);/*去除頭尾空白*/
$title=htmlspecialchars($title,ENT_QUOTES);/*HTML 跳脫*/
$title=mb_substr($title, 0, 100);/*100字剪裁*/
if(!$title){ //利用 if 判斷,錯誤則跳出 switch
// 列出錯誤訊息
break;
}

//訊息檢查
$msg=trim($_GET['msg']);/*去除頭尾空白*/
$msg=htmlspecialchars($msg,ENT_QUOTES);/*HTML 跳脫*/
$msg=mb_substr($msg, 0, 1000);/*1000字剪裁*/
if(!$msg)){ //利用 if 判斷,錯誤則跳出 switch
// 列出錯誤訊息
break;
}

//其他判斷或動作...
break;

default :
// 列出錯誤訊息
break;
}
?>


再看看如果用 IF 去處理輸入驗證時,必須將所有資料先做處理,後面再一個一個去判斷,在閱讀上很不直覺,如果中間有大量的輸入參數要處理時,會讓人找很久。

<?php
if($_GET['type']=='view'){
//其他判斷或動作...

}elseif($_GET['action']=='delete'){
//其他判斷或動作...

}elseif($_GET['action']=='add'){
//標題檢查
$title=trim($_GET['title']);/*去除頭尾空白*/
$title=htmlspecialchars($title,ENT_QUOTES);/*HTML 跳脫*/
$title = mb_substr($title, 0, 100);/*100字剪裁*/

//訊息檢查
$msg=trim($_GET['msg']);/*去除頭尾空白*/
$msg=htmlspecialchars($msg,ENT_QUOTES);/*HTML 跳脫*/
$msg = mb_substr($msg, 0, 1000);/*1000字剪裁*/

if(!$title){
// 列出錯誤訊息
}elseif(!$msg){
// 列出錯誤訊息
}else{
//其他判斷或動作...
}

break;
}else{
// 列出錯誤訊息
}
?>


參考來源:
PHP: switch - Manual
2009-04-16 15:08

[Web] Cookie 小觀念的補述

今天看到網站製作學習誌中提到 COOKIE 的問題
引用來源:[Web] Cookie 小觀念

setcookie('test', 'abc');
var_dump($_COOKIE);

如果你回答的是空陣列的話,那就表示你瞭解 Cookie 的作用了。


除了這個問題之外
其實在 COOKIE 簡單的操作上
有一些問題也常常被忽視

在過去的文章中也有提到我遇到的問題
cookie 路徑問題
apache 301 Redirect 永久重新導向

例如:

http://domain.com/
http://www.domain.com/
http://www.domain.com/dir


這三種都是 COOKIE 有可能的儲存路徑
這常常讓 COOKIE 的存取上造成問題
上層路徑的程式無法取得下層路徑的 COOKIE
而下層路徑在 COOKIE 寫入上卻會不小心造成雙份的問題
2009-04-15 16:11

寬度(width)不要與其他屬性同時設定[CSS]

這是一個很基礎的 CSS 設計觀念,在設有寬度(width)的 Box 上,別加入 border , padding 及 margin 這三個屬性,這對於維護及變更上有相當的好處。

這下面就是全部都設在同一個 Box 上的例子,雖然所需要的語法很少,但在固定寬度的情況下,當要變更其他一個屬性時,勢必要重新設定寬度的大小,是非常不明智的作法,有嘗到苦果的朋友,想必就會瞭解。
.widget{
    width:200px;
    border:2px solid #000;
    padding:3px;
    margin:5px;
}
<div class="widget">text text</div>


最好的方式就是將寬度的屬性獨立成單一的 Box,其他屬性則設定在內層 Box 上,雖然需要較多的語法,但在未來的修改變動上會比較直覺,除了排版上的設定,其他 Box 盡可能使用相對寬度(%)的設定,在對整體欄寬做調整時會比較快樂。
.widget{
    width:200px;
}
.widget div{
    border:2px solid #000;
    padding:3px;
    margin:5px;
}
<div class="widget">
    <div>text text</div>
</div>
2009-04-14 16:48

改寫 dp.SyntaxHighlighter 中 CSS 的 Highlighter 方式

最近掙扎了很久,考慮要不要用 dp.SyntaxHighlighter 來處理 Blog 中程式碼的 Highlighter,因為之前用的 Iris Syntax Highlighter 已經收起來了,而且在文章撰寫上十分不方便也不直覺,所以花了一點心思改成 dp.SyntaxHighlighter 的模式,但 1.5.1 版還蠻陽春的,花了一點時間做語法增強及檔案瘦身,希望這個套件可以用久一點。

原本 dp.SyntaxHighlighter 中 CSS 的 Highlighter 是用 keyword 的方式去處理的,未定義的 keyword 將不會有 Highlighter,為了得到更好的效果,又必須增加更多的 keyword,實在是很不划算。

所以我改用解析 Syntax 結構的方式去處理 Highlighter 的動作,雖然還不是很完整,但整體的效果比原生好多了。


/**=[ CSS ]===========================================*/
dp.sh.Brushes.CSS = function(){
// 樣式定義
this.CssClass = 'dp-css';
this.Style = '.dp-css .value{color:blue;}' +
'.dp-css .important{color:red;font-weight:bold;}'+
'.dp-css .keyword{color:#7F0055;font-weight:bold;}'+
'.dp-css .func{color:#F55;font-weight:normal;}';
};

dp.sh.Brushes.CSS.prototype = new dp.sh.Highlighter();
dp.sh.Brushes.CSS.Aliases = ['css'];

dp.sh.Brushes.CSS.prototype.ProcessRegexList = function(){
function push(array, value){
array[array.length] = value;
}
var match1,match2,regex1,regex2;

/* 加入註解解析 */
this.GetMatches(dp.sh.RegexLib.MultiLineCComments, 'comments');
/* 加入 !important 解析 */
this.GetMatches(new RegExp('!important', 'g'),'important');

/* 解析屬性區塊 */
// 匹配 '{' 至 '}' 之間的文字
regex1 = new RegExp('\{[^}]+\}', 'gm');
// 匹配 'xxx:xxx[;\n\(!]' 格式的文字
regex2 = new RegExp('([:\\w-\.]+)\\s*:\\s*([^;\n\(!]+)[;\n\(!]', 'gm');
while((match1 = regex1.exec(this.code))){
while((match2 = regex2.exec(match1[0]))){
if(!match2[1]){continue;}
// 匹配屬性名稱
push(this.matches, new dp.sh.Match(
match2[1],
match1.index+match2.index,
'func'
));

// 匹配屬性值
if(match2[2]){
push(this.matches,new dp.sh.Match(
match2[2],
match1.index+match2.index+match2[0].indexOf(match2[2]),
'value'
));
}
}
}

/* 解析選擇器區塊 */
// 匹配 'xxx[,\{\n]' 格式的文字
regex1 = new RegExp('^([\\s\\w\.#*:+-]+)[,\{\n]', 'gm');
while((match1 = regex1.exec(this.code))){
if(!match1[1]){continue;}
push(this.matches, new dp.sh.Match(
match1[1],
match1.index,
'keyword'
));
}
};


效果可察看之前的文章:
IE6 對 visibility 負荷過大的問題[CSS]
IE6 中的最大最小寬度和高度
CSS fixed 定位( FF / IE6 )
利用 !important 修正 IE 與 Firefox 的差異
2009-04-13 17:05

網頁常用編碼轉換 (iGoogle)小工具

將一些 JavaScript 中常用的 escape, unescapek, encodeURI, decodeURI, encodeURIComponent, decodeURIComponent 及 HTML 跳脫與反跳脫製作成小工具。
2009-04-13 15:10

IE6 對 visibility 負荷過大的問題[CSS]

IE6 在對大量元件做 visibility 顯示及隱藏
會有負荷量過大的問題出現讓整個瀏覽器變慢
解決的辦法就是用 filter 去代替相同的效果
就會得到很明顯的改善

.Action{
visibility:hidden;
_visibility:visible;/* for IE6 */
_filter:alpha(opacity=0);/* for IE6 */
}

.Action:hover{
visibility:visible;
_filter:alpha(opacity=100);/* for IE6 */
}