2013-08-02 46 views
0

我是批處理文件的新手,儘管已經徹底搜索並找到了具有類似主題的主題,但未涵蓋我確切需要的內容。Windows批處理 - 根據文件名和擴展名將文件移動到文件夾

背景故事: 我有保存時生成兩個文件,一個.PDF和.XLSM的Excel文件。這些文件被保存到「To-Process」文件夾中。

它們被命名爲以下命名約定:公司名稱 - 日期,因此,例如「戴夫斯水暖 - 01-08-13.xlsm」 「戴夫斯水暖 - 01-08-13.pdf」

處理: 每週一次我手動公司名稱如C移動到這些單獨命名的文件夾:/文件/銷售/ EXCEL/DAVES水暖/ C:/ dociuments /銷售/ PDF/DAVES水暖/

我欣賞公司名稱中的空格不起作用,但希望我們可以使用 - 作爲分隔符?

最終我期待創建一個批處理文件,該文件將通過文件夾中的文件步進,閱讀公司名稱和移動每個文件基礎上,名和擴展名相關的文件夾自動上面的處理。

當我決定處理時,我可以在任何時候在文件夾中有50個以上的文件。

對此的幫助非常感謝,我希望我已經提供了足夠的信息,看看這是否可行。

非常感謝, 灰

P.S 作爲一個方面說明,我假設我不能合併發送PDF文件作爲之前移動它們的電子郵件附件?例如執行批處理文件,通過電子郵件發送PDF到預定義的電子郵件地址,然後將'pdf'和'xlsm'移動到相關文件夾。這並不重要,只是對批量處理的能力感到好奇。

回答

2

EDITED使用不同的目標文件夾。如果您打算在同一個文件夾中使用批處理文件名,請不要使用-

試試這個。它使用第一個 - 以文件名作爲分隔符,刪除最後一個空格字符,在需要時創建一個目錄,並將這些文件移動到適當的文件夾中。

包含文件名!和%可能是一個問題。

@echo off 
cd /d "c:\To-Process" 
setlocal enabledelayedexpansion 
for %%a in (*-*.*) do (
    for /f "delims=-" %%b in ("%%a") do (
    set "f=%%b" 
     if /i "%%~xa"==".pdf" (
     md "C:/documents/sales/pdf/!f:~0,-1!" 2>nul 
     move "%%a" "C:/documents/sales/pdf/!f:~0,-1!" >nul 
     ) 
     if /i "%%~xa"==".xlsm" (
     md "C:/documents/sales/excel/!f:~0,-1!" 2>nul 
     move "%%a" "C:/documents/sales/excel/!f:~0,-1!" >nul 
     ) 
    ) 
) 

有批/ VBS腳本發送一封電子郵件,帶有附件。
谷歌爲他們,或使用BlatSendmail

+0

嗨感謝您的回覆,我會測試並讓您知道我如何繼續。我最初注意到的一件事是我們沒有設置目標文件夾。理想情況下,需要基於擴展名的兩個單獨的文件夾... :) – Ash

+0

批處理文件正在查看文件夾名稱而不是文件名,因此在運行時創建文件夾'C:/ To-Process/t'(To To-process ,在 - 然後減去prev'o',離開T .. 謝謝, 灰 – Ash

+0

我編輯它使用不同的文件夾。它不會解析'c:\ To-Process',因爲一個簡單的for循環不會返回文件夾信息,但我也離開了它定義新文件夾的起始數字,所以它使用** last **只有字符。 – foxidrive

相關問題