檔案部署指令實戰技巧整理

比起滑滑鼠,我更喜歡開DOS視窗敲鍵盤下指令解決問題,效率高,操作程序可以保存並加以優化,成果可反覆使用並散佈供他人使用。當手指飛快在鍵盤上躍動,還有種自己正忙著拯救世界,或是藝術家沈醉在表演中的錯覺 XD

前陣子分享過產生批次指令部署檔案的小工具,在最近上線過程耍得虎虎生風,習得實戰技巧幾則,特筆記備忘。

COPY 三寶

COPY、XCOPY、ROBOCOPY 三者各有無法被取代的特色,視場合使用,俗稱 COPY 三寶(喂!不要亂取名字啦)。完整參數介紹:COPYXCOPYROBOCOPY

複製檔案時如何覆寫被設為唯讀的檔案?

XCOPY 有個 /R 參數,例如:xcopy d:\src\blah\a.js d:\dst\blah\a.js /y /r。(記得還要加上/y,省略確認直接覆寫。

如何找出某個時點之後更新的檔案?

上線程式時若想挑出有更動的檔案,ROBOCOPY 有個好用參數 /xo /maxage,可以搜尋整個目錄挑出指定時間後才更新的檔案,並依原資料夾結構擺放,用它直接對目的資料夾進行覆寫,一個動作完成更新。

例如以下指令可挑出2016/10/01之後有異動的檔案:robocopy d:\WWW\Oasis d:\Set9527\Oasis /MAXAGE:20161001 /XO /S

接下來執行 xcopy d:\Set9527\Oasis \\192.168.1.1\d$\WWW\Oasis /s /y 就可用整個資料夾覆寫目的資料夾,但只更新有異動的檔案。

如何將 DIR 結果轉為檔案清單?

部署指令產生器使用檔案清單跟主機 IP 清單展開成 COPY 指令,要將 DIR 結果轉成文字清單,可使用 PowerShell Get-ChildItem取得檔案物件陣列,從物件FullName屬性取得完整路徑再去除父資料夾部分轉成相對路徑。例如:Get-ChildItem -Path E:\Set9527\Oasis -Recurse –File | % {$_.FullName.Replace("E:\Set9527", "") }

實際應用時,有時 Get-ChildItem 的結果還需加上篩選條件或一些花式變化,透過 Pipeline 串接可以輕易達成。參考

如果想將執行結果複製到剪貼簿,不要再傻傻滑滑鼠選範圍或輸出到檔案再取回,後方用 Pipeline 串接 clip.exe 工具,一次搞定。

[2016-10-16更新] 感謝安德魯補充,dir /b /s 也可快速產生檔名清單,另外 for 也能產生相同結果且功能更強大。

[2016-10-26更新]發現更好用的 forfiles 指令:forfiles /p E:\Set9527\Oasis /s /c "cmd /c echo @relpath"

複製檔案時如何自動建立資料夾?

遇到複製整個資料夾(或以萬用字元指定多檔)而目的路徑不存在時,XCOPY 會詢問目標路徑為檔案還是資料夾:

要避免 XCOPY 詢問,可加上 /i 參數,可指示 XCOPY 自動建立資料夾並複製檔案。 若複製來源為單一檔案便不適用 /i 參數,一定跳出詢問:

最簡單的解法是在目的路徑後方加上一個"\"搞定。

歡迎推文分享:
Published 16 October 2016 10:16 AM 由 Jeffrey
Filed under:
Views: 5,209



意見

# 安德魯 said on 16 October, 2016 01:27 AM

DIR 目錄轉成清單,有簡單的做法

DOS 指令: dos /s /b > list.txt

/b 是只列出檔名, 不包含任何大小等資訊

/s 是 recursive

不然 for /R %i in (*) do echo %i 也可以做格式的變化..  %i 有各種參數可以用,詳情可查閱 for /?

# Jeffrey said on 16 October, 2016 02:24 AM

to 安德魯,竟漏了 /b 這個好東西,感謝補充!已加入本文

# 擼蛇 said on 19 October, 2016 01:52 AM

如果dos可以commit rockback多好呢

經常寫錯command 然後就刪錯東西了

# 安德魯 said on 24 October, 2016 05:06 AM

自肥一下,NTFS 也是支援交易的喔.. 以前寫過文章介紹:

columns.chicken-house.net/.../txf-1-%E5%88%9D%E6%8E%A2-transactional-ntfs

只是不知有沒有人做成指令,可以在 DOS or Powershell 處理完之後下達 commit or rollback ... XDD

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2016>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication