【问题标题】:Delete all files that have same name as a .jpg recursively递归删除所有与.jpg同名的文件
【发布时间】:2020-05-26 12:53:51
【问题描述】:

我想为我的“发送到”菜单创建一个小批量脚本,用于删除某些文件:

我有很多以这种约定命名的文件:foo.xxx, foo.jpg, bar.xxx and bar.jpg。我想删除 .xxx 文件,其中有一个对应的 .jpg 文件,用于在我调用此脚本的级别以下的所有嵌套文件夹中递归。

基于这个post我想出了以下内容:

@ echo off
pushd "%~1"
for /R %%f in (*.jpg) do echo "%%f"

这至少列出了 .jpg 文件,但我收到一条错误消息,内容如下:

“UNC-Pfade werden nicht unterstützt.Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt。”

我找到了一个post,它显示了如何递归删除文件,但我真的不明白如何结合这两种解决方案来仅删除那些我找到.jpg.xxx 文件。此外,如果有一些健全性检查来检查是否确实存在具有当前名称的 .xxx 文件,那将是很好的,有时这些文件夹中的 .jpg 文件没有对应的 .xxx 文件。

看来我可以像这样通过file extension 删除:

@ echo off
pushd "%~1"
for /R %%f in (*.jpg) do echo "%%~nf"

但是现在我没有完整的路径来删除想要的文件?到目前为止这是正确的吗?提前谢谢!

【问题讨论】:

  • 您是否要在网络驱动器上执行此操作?
  • 是的,它既可以在网络驱动器(存储数据的地方)上工作,也可以在我的本地驱动器上工作。
  • 我的德语不太好,但是这个“UNC Pfade”的措辞意味着你不能在网络路径上这样做。尝试将此网络路径映射到一个字母(使用 SUBST 命令),然后使用通常的 DOS 路径。
  • 感谢您的提示,但脚本甚至按原样列出了正确的路径和文件......但我仍然不明白如何删除我想要的那些文件。我可以稍后解决 UNC-PAth 错误。
  • 鉴于命令扩展已启用,无论如何这是默认配置,pushd 确实支持 UNC 路径并映射这样的临时驱动器号,成为当前工作目录(popd 删除然后是临时驱动器号)。这是您遇到问题的整个脚本,还是您到目前为止没有共享的代码?

标签: windows batch-file


【解决方案1】:

解决方案:

@ echo off
pushd "%~1"
for /R %%I in (*.jpg) do del "%%~dpnI.vgd"

popd

查看所有贡献的 cmets。

【讨论】:

  • ... do del "%%~dpnI.vgd" 2>nul 在文件不存在时抑制错误消息。
  • 我的“发送到”菜单的批处理脚本:pushd“%~1”将不起作用。可以有 50 个 .xxx 您必须编写部分命令 50 次。 UNC 根文件夹的路径是什么?
猜你喜欢
  • 2012-09-19
  • 2022-07-16
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2014-08-22
  • 1970-01-01
  • 2014-07-26
相关资源
最近更新 更多