【问题标题】:go through subdirectories and make a copy of a file if it exists遍历子目录并复制文件(如果存在)
【发布时间】:2014-10-04 00:38:41
【问题描述】:

我很确定 FOR 命令会处理这个问题,但我似乎无法正确使用语法(编程时总是很吃力)。

我想遍历特定父目录下的所有子目录,如果 dog.txt 文件存在于该子目录中,请复制一份名为 cat.txt 的文件

这是我得到的最接近的,但它把 cat.txt 放在父目录中:

for /r %f in (dog.txt) do copy %f cat.txt

【问题讨论】:

  • 您真的在运行 DOS 而不是 Windows?您是 80 年代的时间旅行者吗?
  • @Barmar 自动化是面向未来的东西,而不是来自过去

标签: for-loop command dos


【解决方案1】:

您非常接近,您只需要使用找到的文件中的路径即可。还应该防止路径/文件中有空格。如果文件名中没有通配符,你可能会发现 for 循环会尝试在每个目录中复制,无论那里是否有文件,以避免这种情况,要么添加通配符,要么使用 if exists。

for /r %f in (dog.txt) do if exist "%f" copy "%f" "%~dpfcat.txt" /y

还有一个警告,如果你把它放在一个 bat 文件中,你需要转义 % 符号。

for /r %%f in (dog.txt) do if exist "%%f" copy "%%f" "%%~dpfcat.txt" /y

【讨论】:

  • 这将无法正常工作,除非搜索词包含某种通配符 - 这是 for 命令的这种形式的限制。
  • @foxidrive,我已经评论了通配符。但是,如果需要一个特定的文件名,那么通配符将不起作用(可能会提取额外的文件)并且使用 if exist 检查每个目录中的文件是一个更好的解决方案。
  • 是的,if exist 将过滤正确的文件。我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多