iT邦幫忙

0

請問要如何以DOS command或WScript把子目錄下的檔案,全部複製至指定目錄(但不含目錄結構)

假設有一A目錄,底下分別有A1,A2,A3,A4....的子目錄,而各子目錄底下都有一個檔案,請問要如何把A1,A2,A3,A4....下的檔案全部複製到B目錄,但不建立A1,A2,A3,A4....的目錄結構。

使用xcopy /s是會在B底下同步建立A1,A2,A3,A4....等目錄,故不適用。

以下的作法須為 A1、A2、A3、A4、....的子目錄底下的檔案檔名皆相同

寫個批次檔
把 A1、A2、A3、A4... 視為變數
以 copy *.* 指令搭配使用路徑變數 %path% 即可
jacky1122提到:
檔案檔名皆相同

更正:檔案檔名皆不相同
或者使用 Norton Command 5.0
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

24
slime
iT邦大師 1 級 ‧ 2013-01-14 21:52:58
最佳解答
<pre class="c" name="code">
@echo off
set temp_file=4892346928364.txt
if exist %TEMP%\%temp_file% echo 卡家雖小....
rem 以上是隨便加的, 以下才是主要功能....

dir /a-d /b /s A目錄 > %temp_file%
for /F "delims=''" %%f in (%temp_file%) do copy "%%f" B目錄

rem 注意幾點:
rem 1. 批次檔內, 變數的 % 或 %%
rem 2. for /F 功能在 XP 或 Server 2003 測試 OK , 其他版本不保證.
rem 3. for /F 要加上 "delims=''" 避免目錄或檔名有空白造成異常.
rem 4. 實作時 A目錄 跟 B目錄 要自己改名, 另外要注意同名問題.
rem 5. 如果當備份用, 要注意時差引起的問題. 例如隔天複製時檔案已經存在的異常.
rem 6. 這方法需要有暫存區放一個檔.
rem 7. 只能滿足您題意需要, 無法處理衍生的問題, 例如但不限於: B目錄 空間不足.
rem 8. 本人無業中, 歡迎捐款, 但請勿拍打或餵食.

set temp_file=
slime iT邦大師 1 級 ‧ 2013-01-14 21:58:43 檢舉

進化版:

<pre class="c" name="code">
@for /R A目錄 %%f in (*) do @copy "%%f" B目錄 
lovex iT邦新手 5 級 ‧ 2013-01-15 00:45:39 檢舉

可正常執行沒問題,but....要發問後六小時才能選最佳解答..!!

bat真的是很強大,可惜懂得太少了~~

<pre class="c" name="code">echo 卡家雖小....  

堪稱最經典語法啊!頗有畫龍點睛之妙矣...讚

我要發表回答

立即登入回答