Win7中根据列表自动将文件移动到各个子文件夹

Automated move of files to various subfolders based on list in Win7

我的工作需要将很多文件移动到不同的文件夹。我能够从我们的内部网页获得一份人类可读的列表,其中列出了哪些文件去了哪里。我想做的是在 Windows 7.

上自动执行文件移动过程

我有大约 450 个文件,所有文件都用数字和字母命名,例如1.mp4、2.mp4、2a.mp4 等我需要将它们放入特定的文件夹中,并进行编号。例如。文件夹 6431,文件夹 2315。

这是我得到的列表示例:

High Performance Dance Center (AK) - 3356

4 dances competing
Finals

#20 3:57 PM      Flower Festival
#120    9:27 PM  Landfill
#158    4:37 PM  Ladies With An Attitude
#230    9:02 PM  Sound of Silence`

Karla Pattavina's Dance Academy (AL) - 172

5 dances competing
Finals
#47 5:48 PM         Turn to Stone
#69 6:54 PM         Taking Flight
#93 8:06 PM         All I Want
#211    8:01 PM     I Look To You
#255    10:30 PM    unDefined

因此文件 20.mp4、120.mp4、158.mp4 和 230.mp4 进入文件夹 3356。文件 47.mp4、69.mp4、93.mp4、211.mp4 和 255.mp4 进入进入文件夹 172。现在只需对 20-40 个不同文件夹中的 400 多个文件重复此操作。

我可以让我们的网站管理员生成与现在不同格式的列表,但是像这样移动文件的最佳方式是什么?我想使用批处理脚本,或者任何不需要特殊软件的东西。越防呆越好

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (q28186729.txt) DO (
 CALL :analyse %%a
)

GOTO :EOF
::
:analyse
:: line may begin "#number"
SET "filename=%1"
IF "%filename:~0,1%"=="#" ECHO(move "%sourcedir%\%filename:~1%.mp4" "%destdir%\%dirname%\"&GOTO :eof
: dirnl
SET "filename=%2"
IF NOT DEFINED filename GOTO :EOF
IF "%3"=="" IF "%1"=="-" SET "dirname=%2"&MD "%destdir%\%2\" 2>nul&GOTO :EOF
SHIFT
GOTO dirnl
GOTO :eof

您需要更改 sourcedir 的设置以适合您的情况。

我使用了一个名为 q28186729.txt 的文件,其中包含您的数据用于我的测试。

所需的 MOVE 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO(MOVE更改为MOVE以实际移动文件。附加 >nul 以禁止报告消息(例如 1 file moved

这很简单!