2014-06-07 28 views
0

我有每天需要歸檔的文本文件,並且想自動執行它。 大約有100個用戶文件夾,每個用戶文件夾有20個子文件夾。批文件根據文件名將文件歸檔

Ex User Folder structure: 
    D:\Logs\John Hayse\01 
    D:\Logs\John Hayse\02 
    D:\Logs\John Hayse\03 
    etc... up to D:\Logs\John Hayse\20 

Ex filenames: 
    John.Hayes.T01.Daily.Log.txt 
    John.Hayes.T02.Daily.Log.txt 
    John.Hayes.T04.Tasks.To.Complete.txt 
    Billy.Gavin.T02.Daily.Logs.txt 

我開始扶正一個批處理文件,做幾百個,如果存在語句是這樣的:

if exist D:\John.Hayes.T01* move D:\John.Hayes.T01* D:\Logs\John Hayse\01" 
if exist D:\John.Hayes.T02* move D:\John.Hayes.T02* D:\Logs\John Hayse\02" 

如果我創建一個包含所有用戶的文件夾一個單獨的文本文件:

dir "D\Logs" /b /a:d >D:\UserFolderList.txt 

我將如何使用它來創建if exists語句一次,並循環遍歷所有用戶文件,並將它們放在適當的User文件夾和其相應的子文件夾##中?

Ex. 
D:\John.Hayes.T02.Daily.Log.txt archive to D:\Logs\John Hayes\02 

的用戶文件總是與他們FirstName.LastName.T啓動##,但用戶的文件夾中有一個空間,而不是「」在他們的名字和姓氏之間。

+0

如果你想要打包的批處理文件,然後描述實際的任務 - 源文件夾,文件,目標文件夾樹,如果它在網絡上等等等等。 – foxidrive

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
FOR /f "tokens=1,2" %%a IN (
    'dir /b /ad "%destdir%\*" ' 
) DO FOR %%n IN (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20) DO (
IF EXIST "%sourcedir%\%%a.%%b.t%%n.*" (
    MD "%destdir%\%%a %%b\%%n\" 
    MOVE "%sourcedir%\%%a.%%b.t%%n.*" "%destdir%\%%a %%b\%%n\" 
) 
) 

GOTO :EOF 

這應該執行你的描述格蘭任務 - 你需要改變的sourcedirdestdir設置以適合。

如果目標目錄不存在,則創建目標目錄。如果需要,將2>nul附加到MD行以抑制already exists消息。

請注意,您的方案中存在明顯的缺陷。你顯然不適合目標文件已經存在的可能性。

相關問題