PowerShell 筆記 – 迴圈與檔案

由於工作的關係,已經習慣使用 Linux bash 的工作程式來編輯(或修改)文字資料了。現在要我移到 Windows 上作業,實在很不習慣。
但還好現代的 Windows 有提供另一個比 cmd.exe 更強大、方便的環境:PowerShell

於是,我開始在 PowerShell 上重練基本功囉!!
第一個實用的基本功是:迴圈

## 記數迴圈:產生一個 2 到 5 的數列
for ($i=2; $i -lt 6; $i++){
echo $i
}

## 執行結果:
#2
#3
#4
#5

由此可知 PowerShell 的語法類似 C++ 與 bash 的綜合:

## 語法
for ($變數=初始值; $變數 -le 最大值; $變數++){ 重複性的操作 }

其中 -le 是"小於等於"運算子;另外還有"小於"(-lt)、"大於等於"(-ge)、與"大於"(-gt)。


如果想要用迴圈來對資料夾中的某些檔案進行修改,則要改用 ForEach 迴圈配合 Get-ChildItem 指令。為避免搞混,我們先介紹 Get-ChildItem 指令:(詳見 微軟官方說明 )

## 產生一個檔案列表的物件
$ff=Get-ChildItem ".\my_dir" -filter *_new.txt;
# 相當於在命令列執行 dir .\my_dir\*new.txt 的結果
echo $ff;            # 類似 dir 指令的結果
echo $ff.FullName;   # 完整路徑+檔名
echo $ff.Name;       # 檔名
echo $ff[2];         # 第 3(=2+1) 個檔案

Get-ChildItem 物件還有其他屬性可以使用,可透過鍵入 $ff. 再按 [Tab] 鍵來瀏覽所有可用的屬性哦!

再來,介紹 ForEach 迴圈:(詳見 微軟官方說明 )

## 語法
ForEach($變數 in 某個集合或列表){ 重複性的操作 }

最後,把 ForEach 迴圈與 Get-ChildItem 整合起來:

## 掃描 my_dir 資料夾中的 .wav 檔
ForEach($ff in (Get-ChildItem ".\my_dir\" -filter *.wav)){
$newff=($ff.Name).replace(".wav","_old.wav");
echo "$ff ---> $newff";
}

 

結論:雖然微軟提供了一個不錯用的 shell ,但是與 Linux 的 Bash 比較起來,PowerShell 的語法還是不太直覺,而且必需記憶的新東西還是太多了呢!

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s