最近為了將的壓縮、解壓縮、遠端連線硬碟、複製貼上等等的繁瑣的事情寫成 bat 檔案,花了很多時間。 所以就來記錄一下,用 command line 自動化的功能。

  • 刪除整個資料夾、刪除單一檔案
  • 使用 msbuild 建立佈署檔案
  • 複製遠端硬碟的檔案、複製貼上整個資夾並自動取代現有檔案
  • 使用 PowerShell 壓縮與解壓縮檔案
  • 檢查檔案是否存在,並且執行不同指令

刪除整個資料夾、刪除單一檔案

刪除整個資料夾

Delete Entire Folder
  • bat
1
2
3
del /q "D:\Projects\Publish\Today_Deploy\*"
FOR /D %%p IN ("D:\Projects\Publish\Today_Deploy\*.*") DO rmdir "%%p" /s /q
rmdir "D:\Projects\Publish\Today_Deploy"

刪除單一檔案

Delete a file
  • bat
1
del D:\Projects\Publish\Today_Deploy\WebAPI\Web.config

使用 msbuild 建立佈署檔案

Web Deploy
  • bat
1
2
3
4
5
6
7
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "D:\Projects\WebAPI\Project.WebAPI.sln" 
/p:Configuration=Release
/p:DeployOnBuild=True
/p:DeployDefaultTarget=WebPublish
/p:WebPublishMethod=FileSystem
/p:DeleteExistingFiles=True
/p:publishUrl=D:\Projects\Publish\Today_Deploy\WebAPI

複製遠端硬碟的檔案、複製貼上整個資夾並自動取代現有檔案

因為佈署都會連到廠商的VM主機,而且桌面遠端連線那邊的設定,我 D 磁碟有開分享,所以可以從廠商的 VM 直接連到我這邊的 D 磁碟。 因為可以直接連到 D 磁碟,所以也可以用 command line 的方式來複製我要的檔案,只要使用 \\tsclient\d 就可以指定到我電腦的路徑 , \tsclient 是指我這邊的電腦,而 \d 表示我的 D 磁碟。

tsclient copy
  • bat
1
XCOPY \\tsclient\d\Projects\Publish\Today_Deploy.zip D:\Project\ /Y

將我要佈署的整個資料夾含檔案,貼到主機上 server 的資料夾

tsclient copy
  • bat
1
XCOPY D:\Project\Today_Deploy\WebAPI\* D:\Project\WebAPI /s /i /Y

使用 PowerShell 壓縮與解壓縮檔案

使用 PowerShell 壓縮或解壓縮檔案的話要先把 PowerShell 要執行的 script 先寫好,然後 command 呼叫 Powershell.exe 指定要執行的 script ,在設定一些執行參數就可以了。

壓縮

zip
  • ps1
  • bat
1
2
3
4
5
$source = "D:\Projects\Publish\Today_Deploy"
$destination = "D:\Projects\Publish\Today_Deploy.zip"
If(Test-path $destination) {Remove-item $destination}
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source,$destination)

解壓縮

unzip
  • ps1
  • bat
1
2
3
4
5
6
7
8
9
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)

[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}

Unzip "D:\TraPacWebPayment\Today_Deploy.zip" "D:\TraPacWebPayment\Today_Deploy"

檢查檔案是否存在,並且執行不同指令

command line 有檢查檔案是否存在的指令,若檔案不存在,可以用 goto: 的方式直接跳到要指定執行的指令。
如以下指令,會判斷 D:\Project\Today_Deploy.zip 是否存在,若不存在則跳到 :exit 的點去執行,所以 do something… 就不會執行到。

check file exist
  • bat
1
2
3
4
5
6
7
8
@rem check file exits or not
if not exist D:\Project\Today_Deploy.zip goto :exit

do something...

:exit

echo deployment file: D:\Project\Today_Deploy.zip not exists