2011年3月7日

在 Windows PowerShell 中,要使用雙引號(")還是單引號(')顯示文字呢?

Windows PowerShell 允許我們在顯示文字或設定文字變數時,使用雙引號(")跟單引號(')。

例如顯示字串:

'這個是字串'
"這也是字串"

執行結果如下:
顯示文字

設定字串:

$OK = '我說:"沒有問題!"'
$GO = "Let's go."
Write-Host $OK $GO

結果:
設定並顯示文字變數

以上面的範例程式碼來說,如果變數要全部改用雙引號(")或單引號(')來表示,要怎麼辦呢?

有 2 種方式可用,第 1 種是只要把雙引號或單引號再重複一次即可,另外一種方式則使用逸出字元,要提醒大家的是,PowerShell 的逸出字元是 `(跟波浪符號位於同一個按鍵的那個),而非許多語言所用的反斜線(\)。

  • 方法 1:重複一次單引號或雙引號
    $OK = "我說:""沒有問題!"""
    $GO = 'Let''s go.'
    Write-Host $OK $GO

  • 方法 2:使用逸出字元(`)
    $OK = "我說:`"沒有問題!`""
    $GO = "Let's go."
    Write-Host $OK $GO

由上面的數個範例可以看出來,使用雙引號(")跟單引號(')來顯示文字或設定文字變數並沒有什麼差別。但是若要顯示文字變數真正的值時,就有差異了。如下圖,要顯示變數真正的值必須要使用雙引號,如果使用單引號,那麼只會顯示該變數的名稱。

一言以蔽之,雙引號展開變數的值,用單引號只會顯示變數的名稱

要顯示變數真正的值必須要使用雙引號

2011年3月6日

如何讓 IE 9 網址列記錄顯示超過 5 個

於按下 IE 9 網址列放大鏡右邊的下箭頭(▼)時,預設最多只會顯示  5  個曾經輸入過的網址歷史記錄,如下圖:

IE 9 只會顯示  5  個曾經輸入過的網址歷史記錄

欲讓 IE 9 網址列記錄顯示超過 5 個,請依照下列步驟進行設定:

  1. 按下 IE 9 視窗右上方的「工具」按鈕,按下「網際網路選項」
    網際網路選項
  2. 按下「內容」索引標籤,按下「自動完成」區塊中的「設定」按鈕
    按下「自動完成」區塊中的「設定」按鈕
  3. 清除「瀏覽歷程記錄」「我的最愛」這 2 個項目的核取方塊 ,按下多次「確定」按鈕來關閉相關的設定視窗。
    清除「瀏覽歷程記錄」與「我的最愛」核取方塊
  4. 再按下網址列右側的下箭頭(▼),即可看到超過 5 個網址歷史記錄。
    超過 5 個網址歷史記錄了

2011年1月29日

關於 SQL Server 2000 的定序問題

SQL Server 2000 SP4 的主流支援服務已經在 2008 年 4 月 8 日結束,但依舊還是有人在使用,如果可以,應該是要升級到尚提供支援服務的版本,例如:SQL Server 2008。日前就被人家問到了,關於 SQL Server 2000 定序的相關問題,特將其整理如後。

查詢特定資料庫的定序

使用如下的 T-SQL 語法:
SELECT DATABASEPROPERITYEX('<資料庫名稱>', 'Collation')

指定定序的方式

指定定序的方式有 3 種,第 1 種是在安裝 SQL Server 2000 時,就加以指定,這是所謂的伺服器層級的定序。若習慣使用預設的安裝方式,則肯定是看不到定序的設定選項。

另外 2 種則是在建立資料庫或資料表時,才加以指定,這種是資料庫層級的定序與資料表層級定序。

  1. 伺服器層級的定序
    於安裝 SQL Server 時,選擇「進階選項」(Advanced options)進行安裝,才能出現指定定序的對話視窗
    進階選項
    選擇定序
  2. 資料庫層級定序
    於建立資料庫時,指定所要的定序
    指定定序
  3. 資料表層級定序
    於建立資料表時,指定所要的定序
    指定定序

修改定序

  • 重設伺服器定序,可用 rebuildm.exe。當 master 系統資料庫毀損時,也可用這個工具進行修正。
  • 於建立資料庫或資料表後,修改資料庫或資料表的定序:
    -- 修改資料庫定序為 Chinese_PRC_CI_AS
    ALTER DATABASE AlexChuo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE AlexChuo COLLATE Chinese_PRC_CI_AS;
    ALTER DATABASE AlexChuo SET MULTI_USER;
    
    -- 修改資料表定序為 Chinese_PRC_CI_AS
    ALTER TABLE Mytable ALTER COLUMN 姓名 nvchar(10) COLLATE Chinese_PRC_CS_AI;

    要注意的是,修改資料庫的定序設定,並不會變更該資料庫內既有物件的定序設定。
  • 修改欄位定序比較簡單,只要使用如下的 T-SQL:
    ALTER TABLE <資料表名稱> ALTER COLUMN <欄位名稱> <欄位類型與長度> COLLATE <定序>;

    例如:
    ALTER TABLE 員工 ALTER COLUMN 姓名 nvchar(10) COLLATE Chinese_PRC_CS_AI;

2011年1月17日

於安裝 SQL Server 2005/2008 或套用 Service Pack 時,遇到檢查「重新啟動電腦」規則失敗

於安裝 SQL Server 2005/2008 或套用 Service Pack 時,會檢查相關的規則,遇到檢查「重新啟動電腦」規則失敗的訊息:

即便重新開機,再次執行 SQL Server 安裝程式或套用 Service Pack,同樣的訊息依舊存在。

之所以會發生此種問題,是因為以前執行過其他軟體的安裝程式,而該軟體建立了擱置檔案作業,因此在執行或套用 SQL Server 安裝程式與 Service Pack 之前,必須重新啟動電腦才行。

如果重新啟動電腦之後,嘗試再安裝一次,還是出現同樣的錯誤訊息,就表示我們要手動刪除擱置檔案作業:

  1. 關閉安裝程式。
  2. 找出以下機碼:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  3. 在右側窗格中的 PendingFileRenameOperations 上,連按兩下滑鼠左鍵,選取所有的內容,將其刪除。
  4. 再執行安裝程式。

2010年12月30日

使用 Wondows PowerShell 將兩個資料夾中,主檔名相同的檔案搬移到另外一個資料夾

假設資料夾 1 為 D:\doc,資料夾 2 為 D:\txt,其內分別儲存 .doc 與 .txt 檔,要將資料夾 1 中,主檔名與資料夾 2 主檔名相同的檔案搬移到另外一個資料夾(D:\newdoc)。

要如何使用 Wondows PowerShell 進行這樣操作呢?

例如:

資料夾 1(D:\doc)內有下列檔案:

  • a.doc
  • b.doc
  • c.doc
  • aa.doc
  • ab.doc
  • ac.doc

資料夾 2(D:\txt)內有下列檔案:

  • a.txt
  • aa.txt
  • bb.txt
  • cc.txt

資料夾 1 與資料夾 2 中,相同主檔名的有:

  • a
  • aa

所以要將 a.doc 與 aa.doc 搬移到新資料夾(D:\newdoc)。Windows PowerShell 程式碼如下:

# 宣告變數
$folderA = "D:\doc\"
$folderB = "D:\txt\"
$folderNew = "D:\newdoc\"

# 找出資料夾中的每個檔案
foreach ($fileA in Get-ChildItem $folderA)
{
    # 組出另一資料夾中的檔名
    # 方法 1
    $fileB = $folderB + $fileA.Name.Remove($fileA.Name.Length - $fileA.Extension.Length) + ".txt"
    # 方法 2,此法有缺點,萬一檔名中有數個 .doc 都會被換成 .txt
    #$fileB = $folderB + $fileA.Name.ToLower().Replace(".doc", ".txt")

    # 檢查檔案是否存在資料夾中
    If (Test-Path $fileB) {
        "搬移檔案: $fileA"
        $fileA.MoveTo($folderNew + $fileA.Name)
    }
}