【问题标题】:How to copy file recursively into all folders with a specific name (batch file would be preferred)如何以递归方式将文件复制到具有特定名称的所有文件夹中(首选批处理文件)
【发布时间】:2018-02-28 21:57:40
【问题描述】:

我要做的是将 NOMEDIA 文件复制到所有名为 EXTRAS 的子文件夹以及它们的所有子文件夹中,但没有其他文件夹比那些。

例如,这些是 NOMEDIA 文件应该(不)被复制的地方:

**FALSE** ===>  F:\Movies\1234\  
**TRUE** ====>  F:\Movies\1234\Extras\  
**TRUE** ====>  F:\Movies\1234\Extras\1\  
**TRUE** ====>  F:\Movies\1234\Extras\2\  
**FALSE** ===>  F:\Movies\5678\  
**TRUE** ====>  F:\Movies\5678\Extras\  

此代码将仅将 NOMEDIA 文件复制到 EXTRAS 文件夹中,但不会复制其子文件夹,还将在所有目录中创建一个名为“Extras”的新文件和子目录:

for /r "DRIVE:PATH" %i in (Extras.) do @copy "DRIVE:PATH\.nomedia" "%i"

这会将 NOMEDIA 文件复制到所有目录和子目录中。

for /r "DRIVE:PATH" %i in (.) do @copy "DRIVE:PATH\.nomedia" "%i"

任何帮助将不胜感激,谢谢。

编辑:

这是 @Magoo's 解决方案中的代码:

for /r "DRIVE:PATH" %i in (.) do echo "%i"|find /i "\extras\" >nul&if not errorlevel 1 copy "DRIVE:PATH\.nomedia" "%i"

也感谢@Aacini@aschipfl 的帮助! :-)

【问题讨论】:

  • for /F "delims=" %i in ('dir /S /B /A:D "DRIVE:PATH" ^| findstr "\\Extras\\"') do @copy "DRIVE:PATH\.nomedia" "%i"
  • 在批处理文件中,将%i替换为%%i
  • @Aacini 有效,除了一件事:它不会将文件复制到实际的 Extras 文件夹中,只有子文件夹。我如何让它也复制到那里?谢谢!
  • findstr "\\Extras\\" 更改为findstr "\\Extras"

标签: file batch-file recursion copy directory


【解决方案1】:
.... do echo "%i"|find /i "\extras\" >nul&if not errorlevel 1 copy....

这会回显在find 中找到的每个路径名,它会尝试在/i 不区分大小写的模式下定位字符串\extras\find 的输出被 >nul 抑制。如果找到字符串,find 会将 errorlevel 设置为 0,否则设置为 1,因此您可以使用原始的 if errorlevel 语法(其中“if errorlevel n”将为如果errorleveln 或大于 n) 则为 true 并用 not 取反以检测错误级别 = 0(即找到的字符串)。

【讨论】:

  • 非常感谢@Magoo!这成功了!花了几分钟让它正常工作,我不太擅长这种东西......我将发布上面帖子中的完整代码以供未来的观众使用。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2013-04-12
  • 1970-01-01
  • 2018-01-19
  • 2020-03-25
  • 2016-04-10
相关资源
最近更新 更多