2013-10-07 192 views
1

我試圖寫一個批處理文件來執行以下任務的文件複製出來:創建Win7的批處理文件,所有文件夾中

  1. 我有20個子文件夾(牛奶,奶酪,蛋白... )在一個文件夾(ABC)內。每個子文件夾大約有15個.csv文件,分別命名爲2013-10-01,2013-09-02,2013-07-31 .....

  2. 這些月度文件是按月添加的,關於他們的名字沒有模式,例如,它可能是十月的第一天,但​​十一月的第四天。因此,每個月我都會向每個子文件夾添加一個新文件,即文件數量不斷增加;

  3. 每個月,每個子文件夾/類別,我想最近的9頁月的文件複製到其他位置,比如,文件夾CDE;

  4. 將它們複製到文件夾CDE後,我把它們放在一起,以一個文件使用當前時間定義的唯一名稱(%% d - %%ë - %% F)。通過這種方式,我可以每個月都有每個類別的月度文件。

我能寫的代碼,第4步,我想知道如果任何你能不能幫上第3步。我現在必須每次都從所有20個子文件夾手動複製和粘貼9個文件。這是非常低效的,我知道一些批處理命令可以使處理過程更快,更容易。

非常感謝!

回答

0

編輯修復了'複製所有文件'的問題。

這應該做到以下幾點:(變動c:\ CDE和c:\ ABC)

1)從文件夾
2複製最近的9個文件),它們都合併成一個文件名爲文件夾名-HHMMSS (從時間變量)
3)FOLDERNAME-HHMMSS文件在c:\中創建ABC夾
4)刪除9頁複製的文件
5)重複爲每個文件夾

@echo off 
set "source=D:\ABC" 
set "target=C:\files\CDE" 
setlocal enabledelayedexpansion 
md "%target%" 2>nul 
for /d /r "%source%" %%a in (*) do (
    pushd "%%a" 
    set num=0 
     for /f "delims=" %%b in ('dir /o-d /b /a-d') do (
      set /a num+=1 
      if !num! LSS 10 copy "%%b" "%target%" >nul 
     ) 
    set t=!time! 
    set t=!t:~0,2!!t:~3,2!!t:~6,2! 
    copy "%target%\*.*" "%source%\%%~nxa-!t!" >nul 
    echo "%source%\%%~nxa-!t!" created from "%%a" 
    if defined target del "%target%\*.*?" 
    popd 
) 
pause 
+0

嗨foxdrive,感謝您的迅速回復。你的代碼對我來說有點高級,它不適用於複製粘貼(是的,我改變了源和目標)。我仍在消化它,並會在我理解它時通知您。 – BeginnedCSharp

+0

再次複製。我犯了一個錯誤,並在一個命令中錯過了tildas。我測試了它,它在這裏工作。 – foxidrive

+0

新代碼工作完美,除了它複製每個子文件夾中的所有文件,但不是最新的9.我將數字10更改爲9甚至5,但它仍然複製所有文件。 – BeginnedCSharp

0
setlocal enabledelayedexpansion 
for /f "delims=" %%i in ('dir abc /b /o-d') do (set /a a=0&for /f "delims=" %%j in ('dir "abc\%%~i" /b /o-d') do (set /a a+=1&if !a! LEQ 9 (copy /Y "abc\%%~i\%%~j" cde))) 

把這個在同一文件夾中,農行和CDE是
如果這不是你想要的東西,請你詳細說明。

+0

請標記爲正確答案如果這對你有幫助的話。 – nephi12

+0

嗨nephi12,謝謝你的回覆。您的代碼成功複製了ABC下每個子文件夾的最新9個文件。但是,每次從子文件夾複製文件時,新文件都會替換現有文件。所以到一天結束時,我只能從第一個子文件夾中獲得9個文件。我想我們可能需要將9個文件合併爲一個文件,然後再從下一個子文件夾複製。謝謝! – BeginnedCSharp

+0

嗨nephi12,其實我試圖通過編寫另一個合併批處理文件(merge.bat)並從您的代碼(copy.bat)調用它來自己合併它們。儘管我沒有取得任何成功,我想我在代碼中的錯誤位置調用merge.bat? merge.bat可以正常工作。 – BeginnedCSharp

相關問題