Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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_For Loop_Batch Processing - Fatal编程技术网

Batch file 如果文件夹包含某个文件,如何移动它们?

Batch file 如果文件夹包含某个文件,如何移动它们?,batch-file,for-loop,batch-processing,Batch File,For Loop,Batch Processing,我正在批量编写一些(难看的)代码,以便在文件夹之间重新排列文件 我已经创建了代码的一部分,它将具有类似文件名的一种类型的文件移动到同一个文件夹,并创建一个名为“serie.txt”的虚拟文本文件(如果其中有多个文件) 最后,我有一个名为“E:\videos\catalogar\”的文件夹,其中有很多子文件夹,其中一些包含文件“series.txt”。我需要将这些文件夹移动到路径“e:\videos\series\”,为此,我写了以下内容: for /r "e:\videos\catalogar\

我正在批量编写一些(难看的)代码,以便在文件夹之间重新排列文件

我已经创建了代码的一部分,它将具有类似文件名的一种类型的文件移动到同一个文件夹,并创建一个名为“serie.txt”的虚拟文本文件(如果其中有多个文件)

最后,我有一个名为“E:\videos\catalogar\”的文件夹,其中有很多子文件夹,其中一些包含文件“series.txt”。我需要将这些文件夹移动到路径“e:\videos\series\”,为此,我写了以下内容:

for /r "e:\videos\catalogar\" %%F in (serie.txt) do (
   set directorio=%%~dpF
   if not "!directorio!"=="e:\videos\catalogar\" (
    del "!directorio!*.txt"
    move /y "!directorio!." "e:\videos\series\"
   )
)   
delayedexpansion
已打开。
if
的条件是避免移动整个根文件夹


问题是,出于某种原因,此代码将所有子文件夹移动到“E:\videos\catalogar\”中,而不仅仅是包含“serie.txt”的子文件夹。怎么了?

for/r
遍历一个目录树,并且您没有测试子文件夹中是否存在
serie.txt
,因此您的脚本正在尝试每个文件夹以及除根文件夹之外的每个文件夹

这样的脚本将尝试一级子文件夹并测试这些文件夹中的虚拟文件:

for /d %f in ("e:\videos\catalogar\*") do (
    if exist "%%f\serie.txt" (
        move ...
执行目录扫描,但不使用文件掩码。仅当文件掩码包含
*
时,才会使用文件掩码。就我个人而言,我认为这是一个bug(如果文件掩码是
”。
,则可以,但无论如何都应该与掩码匹配),也许我会要求微软为W10修复它

因此-可能按照建议添加门,或者在文件掩码中包含
*
,强制“仅目录匹配”将解决您的问题


无论是哪种方式,给directorio指定一个值都没有什么意义,因为
%%~dpF
在发布的剪贴画中会产生完全相同的效果。

谢谢你,伙计,这对我很有用!我使用了“seri?.txt”掩码,还删除了if条件。
for /r "e:\videos\catalogar\" %%F in (serie.txt) do (