【问题标题】:How to move folders if they contain a certain file?如果文件夹包含某个文件,如何移动它们?
【发布时间】:2014-12-30 23:32:57
【问题描述】:

我正在批量编写一些(丑陋的)代码来重新排列文件夹之间的文件。

我创建了一部分代码,将具有相似文件名的一种类型的文件移动到同一个文件夹,并创建一个名为“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”的那些。怎么了?

【问题讨论】:

    标签: batch-file for-loop batch-processing


    【解决方案1】:
    for /r "e:\videos\catalogar\" %%F in (serie.txt) do (
    

    执行目录扫描,但使用文件掩码。如果文件掩码包含*?,它将仅使用文件掩码。就我个人而言,我认为这是一个错误(如果文件掩码是 '.' 则可以,但应该匹配掩码,否则不管)并且可能要求 Microsoft 为 W10 修复它here may work.

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

    无论哪种方式,为directorio 赋值没有什么意义,因为%%~dpF 将在发布的代码片段中产生完全相同的效果。

    【讨论】:

    • 谢谢你,伙计,这对我有用!我使用了“seri?.txt”掩码,还删除了 if 条件。
    【解决方案2】:

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

    for /d %f in ("e:\videos\catalogar\*") do (
        if exist "%%f\serie.txt" (
            move ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多