2015年12月3日 星期四

[Batch] 辦公室技術文 - 抽取子文件夾中的檔案

每月都有一堆總結數字要整理作報告,之前已經做好自動化用Excel VBA 去對這些檔案作大量重覆動作,不過最近可能重整檔案的存放結構,屆時不能用VBA的 multiple select去一次過選擇需要的檔案去處理。
這些檔案按日子分佈在二十多個子文件夾之中,如果不想修改現有工具的話,就要想辦法:把這些檔案複製出來,集合到一個文件夾中。在研究這個轉變的時候遇上另一個batch檔的應用,很高興的想到這些檔案的處理用.bat的方法會更容易。像這問題只用一行Code就解決了。
for /R ".\" %%f in (*.xls) do xcopy "%%f" ".\result\" /y
Syntax
      FOR /R [[drive:]path] %%parameter IN (set) DO command
      XCOPY source [destination] [options]


[[drive:]path]    ".\"    -將收集的範圍設定成現時路徑之下的文件夾
%%parameter    %%f    -這變數用作儲存找到的的.xls檔案,指令模式下%f代表變數的使用,而在批次檔中要寫成%%f
(set)    (*.xls)    -目標只是收集範圍內的所有.xls的檔案
source    "%%f"    -使用剛才的變數
[destination]    ".\result\"    -建立一個叫result的文件夾儲存目標檔案
[options]    /y    -不要求確認


Batch檔是一個幾新的接觸,順便記下這個第一個用到的批次檔。在用VBA處理自動列印網頁的時候,想讓使用者方便地轉換Default Printer,所以寫了幾個Batch,然後在VBA中呼叫對應旳Batch檔。
設定Default Printer:
RunDLL32.EXE printui.dll, PrintUIEntry /y /n "Nuance PDF"
更多有關 RunDLL32.EXE printui.dll, PrintUIEntry 用法的例子:
http://www.robvanderwoude.com/2kprintcontrol.php
https://technet.microsoft.com/en-us/library/ee624057.aspx

沒有留言:

張貼留言