iT邦幫忙

0

如何寫一個BAT檔每天自動複製前五天之檔案

大家好:
我有一個EXCEL檔需要每天上傳到特定資料夾(共用資料夾方式)
但須依照檔案名稱上傳往前第五天之資料
例:今天是2020/11/11,會產出檔案20201111.xls,但不上傳。
只上傳2020/11/06產出的資料:20201106.xls,其餘不上傳。
檔案名稱格式為20201111.xls
另1:2020/11/11會上傳2020/11/06產出之檔案,2020/11/12會上傳2020/11/07產出之檔案,2020/11/13會上傳2020/11/08之檔案,以此類推。1天只會產生1個檔案,1天也只會上傳1個檔案。
另2:可以利用win10排程軟體固定每天排程上傳檔案嗎?

看更多先前的討論...收起先前的討論...
player iT邦大師 1 級 ‧ 2020-12-17 22:41:41 檢舉
BAT檔比較難弄(牽涉到日期的計算)
你要不要考慮改用PS1檔(PowerShell)
如果是C#,還能抓到檔案的建立日期這些在FAT上的資訊,用FileAge就能簡單找出這個檔案的"年紀"
player大師:請問powershell如何製作?另:可加到win10內建之工作排程軟體裡面嗎?
by2048 iT邦研究生 5 級 ‧ 2020-12-18 08:40:12 檢舉
利用forfiles.exe 把目錄內留下五天的檔案,再做copy
set LogPath=E:\Backup
set DayToKeepLog=5
C:\WINDOWS\system32\forfiles.exe -p "%LogPath%" /s /m *.bak /d -%DayToKeepLog% -c "cmd /C del @FILE"
for /f "usebackq" %%d in (`"dir E:\Backup /ad/b/s | sort /R"`) do rd "%%d"
japhenchen高手:我要複製的檔案不能用「建立日期」、「修改日期」、「存取日期」來上傳。因為可能會回過頭去修改之前的檔案,但又需要按照原定日期上傳,所以才需要利用檔名(日期編碼)來上傳檔案。
powershell 弄這還挺快的.
((Get-Date).AddDays(-6)).ToString("yyyy/MM/dd")+".xls"
michaelwan高手:抱歉!我不懂這串程式碼如何使用。可以麻煩您詳解嗎?謝謝
定期上傳~因為會牽涉到FTP帳號密碼設定~用簡單的備份軟體就好了~
免費備份軟體 Cobian Backup (預設英文可變更為繁體)
Window排程只能定期執行程式執行~無法設定FTP
https://www.cobiansoft.com/cobianbackup.html
用ROBOCOPY指令不就能做差異複製了嘛.....

排程就每五天跑一次........或是設定星期一跟星期五跑
開啟POWERSHELL ISE去跑..或是存成PS1檔案.
copy-item -path ("d:\"+((Get-Date).AddDays(-6)).ToString("yyyyMMdd")+".xls") -Destination d:\temp
michaelwan高手:謝謝您,目前已可手動複製檔案了。還在研究如何設定WIN10排程

1 個回答

3
japhenchen
iT邦大師 1 級 ‧ 2020-12-18 11:49:48

robocopy Windows7以上內建,可指定/MAXAGE:5 只複製5日內的檔案,可做差異複製避免多餘傳輸,也可以做備份複製避免版本錯誤的覆蓋

C:\Users\ABCDEFG>ROBOCOPY /?

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  已啟動 : 2020年12月18日 上午 11:44:45
           使用方式 :: ROBOCOPY source destination [file [file]...] [options]

             source :: 來源目錄 (drive:\path 或 \\server\share\path)。
        destination :: 目的地目錄  (drive:\path 或 \\server\share\path)。
               file :: 要複製的檔案  (名稱/萬用字元: 預設值是 "*.*")。

::
:: 複製選項 :
::
                 /S :: 複製子目錄,但是空的子目錄例外。
                 /E :: 複製子目錄,包括空的子目錄。
             /LEV:n :: 只複製來源目錄的前 n 層。

                 /Z :: 在可重新啟動模式複製檔案。
                 /B :: 在備份模式複製檔案。
                /ZB :: 使用可重新啟動模式; 如果拒絕存取,則使用備份模式。
                 /J :: 使用無緩衝的 I/O 複製 (建議使用於大型檔案)。
            /EFSRAW :: 在 EFS RAW 模式複製所有加密檔案。

  /COPY:copyflag[s] :: 要為檔案複製什麼內容 (預設值是 /COPY:DAT)。
                       (複製旗標 : D=資料、A=屬性、T=時間戳記、X=跳過替代資料流)。
                       (S=安全性=NTFS ACL、O=擁有者資訊、U=稽核資訊)。


               /SEC :: 複製包含安全性的檔案 (相當於 /COPY:DATS)。
           /COPYALL :: 複製所有檔案資訊 (相當於 /COPY:DATSOU)。
            /NOCOPY :: 不複製檔案資訊 (可用於 /PURGE)。
            /SECFIX :: 修正所有檔案的安全性,即使略過的檔案也包含在內。
            /TIMFIX :: 修正所有檔案的檔案時間,即使略過的檔案也包含在內。

             /PURGE :: 刪除來源已經不存在的目的地檔案/目錄。
               /MIR :: 鏡像樹狀目錄 (相當於 /E 加 /PURGE)。

               /MOV :: 移動檔案 (複製後從來源刪除)。
              /MOVE :: 移動檔案和目錄 (複製後從來源刪除)。

     /A+:[RASHCNET] :: 將指定的屬性新增至複製的檔案。
     /A-:[RASHCNET] :: 從複製的檔案移除指定的屬性。

            /CREATE :: 只建立樹狀目錄和長度為零的檔案。
               /FAT :: 只使用 8.3 FAT 檔案名稱,建立目的地檔案。
               /256 :: 關閉特長路徑 (> 256 個字元) 支援。

             /MON:n :: 監視來源; 看到 n 個字元以上時再次執行。
             /MOT:m :: 監視來源; m 分鐘後如果變更,則再次執行。

      /RH:hhmm-hhmm :: 執行時數 - 新複本可以開始的時間。
                /PF :: 根據每一個檔案為基礎,檢查執行時數
                       (不是根據每一次通過)。

             /IPG:n :: 慢速線路可用頻寬,封包之間的差距 (毫秒)。

                /SJ:: 將接合作為接合複製,而非接合目標。
                /SL :: 將符號連結作為連結複製,而非連結目標。

            /MT[:n] :: 以 n 個執行緒執行多執行緒複製 (預設值為 8)。
                       n 必須至少為 1,但不可以大於 128。
                       此選項與 /IPG 和 /EFSRAW 選項不相容。
                       請使用 /LOG 選項重新導向輸出,以獲得更好的效能。

 /DCOPY:copyflag[s] :: 對於目錄,要複製哪些項目 (預設值是 /DCOPY:DA)。
                       (複製旗標 : D=資料、A=屬性、T=時間戳記、E=EA、X=跳過替代資料流)。

           /NODCOPY :: 不複製目錄資訊 (預設會執行 /DCOPY:DA)。

         /NOOFFLOAD :: 複製檔案 (不使用「Windows 複本卸載」機制)。

          /壓縮 :: 如果適用,在檔案傳輸期間要求網路壓縮。

::
:: 檔案選取選項 :
::
                 /A :: 只複製已設定保存屬性的檔案。
                 /M :: 只複製包含保存屬性的檔案並重設。
    /IA:[RASHCNETO] :: 只包含附帶任何指定屬性的檔案。
    /XA:[RASHCNETO] :: 排除附帶任何指定屬性的檔案。

 /XF file [file]... :: 排除符合指定名稱/路徑/萬用字元的檔案。
 /XD dirs [dirs]... :: 排除符合指定名稱/路徑的目錄。

                /XC :: 排除變更的檔案。
                /XN :: 排除較新的檔案。
                /XO :: 排除較舊的檔案。
                /XX :: 排除其他檔案和目錄。
                /XL :: 排除孤立的檔案和目錄。
                /IS :: 包含相同的檔案。
                /IT :: 包含調整的檔案。

             /MAX:n ::檔案大小上限 - 排除大於 n 個位元組的檔案。
             /MIN:n :: 檔案大小下限 - 排除小於 n 個位元組的檔案。

          /MAXAGE:n :: 檔案期限上限 - 排除 n 日/日期之前的檔案。
          /MINAGE:n :: 檔案期限下限 - 排除 n 日/日期之後的檔案。
          /MAXLAD:n :: 上次存取日期上限 -排除自 n 日後未使用的檔案。
          /MINLAD:n :: 上次存取日期下限 - 排除自 n 日後使用的檔案。
                       (如果 n < 1900 則 n = n 日,否則 n = YYYYMMDD 日期)。

               /FFT :: 假設 FAT 檔案時間 (2 秒資料粒度)。
               /DST :: 補償 1 小時 DST 時間差異。

                /XJ :: eXclude 符號連結 (同時適用於檔案與目錄) 和連接點。
               /XJD :: eXclude 目錄和連接點的符號連結。
               /XJF :: 為檔案排除符號連結。

                /IM:: 包含已修改的檔案 (依變更次數而有所不同)。
::
:: 重試選項:
::
               /R:n :: 失敗複本的重試次數: 預設值是 1 百萬次。
               /W:n :: 重試之間等候時間: 預設值是 30 秒。

               /REG :: 將 /R:n 和 /W:n 儲存至登錄中,變成預設值。

               /TBD :: 等候共用名稱 [受到定義] (重試錯誤 67)。

               /LFSM :: 在低可用空間模式下操作,啟用複製暫停及繼續 (請見備註)。

               /LFSM :n [KMG] :: /LFSM,指定以 n [K:kilo,M:mega,G:giga] 位元組表示的界限大小。

::
:: 記錄選項:
::
                 /L :: 限清單 - 不複製、刪除任何檔案或加上戳記。
                 /X :: 報告所有其他檔案,不僅是這些選取的檔案而已。
                 /V :: 產生詳細資訊輸出,顯示略過的檔案。
                /TS :: 在輸出中包含來源檔案時間戳記。
                /FP :: 在輸出中包含檔案的完整路徑名稱。
             /BYTES :: 將大小列印成位元組。

                /NS :: 沒有大小 - 不記錄檔案大小。
                /NC :: 沒有類別 - 不記錄檔案類型。
               /NFL :: 沒有檔案清單 - 不記錄檔案名稱。
               /NDL :: 沒有目錄清單 - 不記錄目錄名稱。

                /NP :: 無進度 - 不顯示複製百分比。
               /ETA :: 顯示複製的檔案預估到達時間。

          /LOG:file :: 輸出狀態至記錄檔 (覆寫現有的記錄檔)。
         /LOG+:file :: 輸出狀態至記錄檔 (附加至現有的記錄檔)。

       /UNILOG:file :: 輸出狀態至記錄檔,變成 UNICODE (覆寫現有的記錄檔)。
      /UNILOG+:file :: 輸出狀態至記錄檔,變成 UNICODE (附加至現有的記錄檔)。

               /TEE :: 輸出至主控台視窗,以及記錄檔。

               /NJH :: 沒有工作標頭。
               /NJS :: 沒有工作摘要。

           /UNICODE :: 輸出狀態為 UNICODE。

::
:: 工作選項:
::
       /JOB:jobname :: 從命名的工作檔案取得參數。
      /SAVE:jobname :: 將參數儲存至命名的工作檔案
              /QUIT :: 處理命令列後結束 (檢視參數)。
              /NOSD :: 未指定來源目錄。
              /NODD :: 未指定目的地目錄。
                /IF :: 包含以下檔案。

::
:: 備註 :
::
       在磁碟區的根目錄上使用 /PURGE 或 /MIR 先前會導致
       robocopy 也對系統磁碟區資訊目錄內的檔案套用
       要求的作業。這種情況已經不再發生; 如果
       指定任一項,robocopy 將會略過複製工作階段的
       最上層來源和目的地目錄中具有該名稱的任何檔案或目錄。

       修改過的檔案分類僅適用於只有當來源
       和目的檔案系統支援變更時間戳記 (例如 NTFS)
       和來源和目的檔案有不同的變更時間,但會
       否則相同。這些檔案不會被預設值; 指定 /IM 複製
       以包含它們。

       應針對目錄嘗試延伸屬性複製的 /DCOPY:E 旗標要求,
       請注意,如果無法複製目錄的 EA,則目前的 robocopy
       將會繼續。這個旗標也不會包含
       在 /COPYALL。

       使用 /LFSM 要求 robocopy 在 [可用空間不足模式] 下操作。
       在此模式下,每當檔案副本導致
       目的磁碟區的可用空間低於 [下限] 值,robocopy 將會暫停,該數值
       可以明確地指定 LFSM:n[KMG] 旗標格式。
       如果 /LFSM 未與明確下限值一併指定,則下限值設定為
       目的磁碟區大小的 10%。
       可用空間不足模式與 /MT、/EFSRAW、/B 及 /ZB 不相容。

C

也能做XCOPY的子資料夾與下層(無限層)的檔案複製....如果只是很單純的資料夾間的複製或含UNC網路磁碟複製,這就真的很好用

我要發表回答

立即登入回答