批处理,移动位于子目录中的文件

时间:2014-04-22 05:01:06

标签: batch-file move

我希望移动位于具有特定文件扩展名的所有二级子目录中的所有文件。

以下是我所拥有的:

cd D:\Media\Unsorted
if not exist Movies mkdir Movies
move Movies-Downloaded\*\*.mp4 Movies\

我的行动是否有问题?句法?我怎么能做到这一点?

1 个答案:

答案 0 :(得分:2)

是的,有些不对劲。您只能在指定路径的最后一个元素上使用通配符。并且您在最后一个元素(.mp4文件)和上一个元素(.mp4文件所在的文件夹)中使用通配符。这是不允许的。

您必须枚举文件夹,然后为每个文件夹将文件中的文件移动到目标文件夹。

pushd D:\Media\Unsorted
if not exist Movies mkdir Movies
for /d %a in ("*") do if /i not "%~nxa"=="Movies" move /y "%~fa\*.mp4" "Movies"
popd

要将以前的命令包含在批处理文件中,百分号必须加倍,即用%替换每个%%

对于每个目录(for /d %a,其中%a将保存对正在处理的目录的引用)在当前目录(pushd)中的作用,如果名称和扩展名为目录(%~nxa)不等于目标目录,然后使用其完整路径(.mp4)将所有%~fa文件从源目录移动到目标。