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

问题描述 投票:0回答:1

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

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 exit 语句一次并循环遍历所有用户文件并将它们放置在正确的用户文件夹及其相应的子文件夹##中?

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

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

batch-file
1个回答
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

这应该执行您描述的任务 - 您需要更改

sourcedir
destdir
的设置以适应。

如果目标目录尚不存在,则创建该目录。如果需要,将

2>nul
附加到
MD
行以抑制
already exists
消息。

请注意,您的方案存在明显的缺陷。您显然没有考虑到目标文件已经存在的可能性。

© www.soinside.com 2019 - 2024. All rights reserved.