我有需要每天存档的文本文件,并且希望将其自动化。 大约有 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## 开头,但用户的文件夹有一个空格而不是“.”在他们的名字和姓氏之间。
@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
消息。
请注意,您的方案存在明显的缺陷。您显然没有考虑到目标文件已经存在的可能性。