批处理文件根据文件名归档文件

时间:2014-06-07 19:24:43

标签: batch-file

我有每天需要存档的文本文件,并希望自动化它。 大约有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 if exists语句,如下所示:

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语句一次并遍历所有Users文件并将它们放在正确的User文件夹和相应的子文件夹中##?

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

用户文件始终以其FirstName.LastName.T ##开头,但用户的文件夹有空格而不是'。'在他们的名字和姓氏之间。

1 个答案:

答案 0 :(得分: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消息。

请注意,您的计划存在明显缺陷。您显然不会满足目标文件已存在的可能性。