Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理,移动位于子目录中的文件_Batch File_Move - Fatal编程技术网

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

Batch file 批处理,移动位于子目录中的文件,batch-file,move,Batch File,Move,我想移动位于所有具有特定文件扩展名的二级子目录中的所有文件 以下是我所拥有的: cd D:\Media\Unsorted if not exist Movies mkdir Movies move Movies-Downloaded\*\*.mp4 Movies\ 我的“移动”语法有问题吗?我怎样才能做到这一点呢?是的,有点不对劲。只能在指定路径的最后一个元素上使用通配符。在最后一个元素(.mp4文件)和上一个元素(.mp4文件所在的文件夹)中使用通配符。这是不允许的 您必须枚举文件夹,然后针

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

以下是我所拥有的:

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

我的“移动”语法有问题吗?我怎样才能做到这一点呢?

是的,有点不对劲。只能在指定路径的最后一个元素上使用通配符。在最后一个元素(.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
要在批处理文件中包含前面的命令,百分比符号必须加倍,即用
%%
替换每个
%%


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

是否确定*对于目录通配符可用?运行命令时是否出现错误?