如何根据另一个文件夹从一个文件夹中删除文件?

如何根据另一个文件夹从一个文件夹中删除文件?

我有一个文件夹,里面有“好”的 JPG 文件。然后我又有一个文件夹,里面有所有的 JPG 文件和它们的 RAW 文件。我该如何根据好文件夹中的文件删除 JPG+RAW 文件?

即使有一个应用程序可以做到这一点,那就太好了!

答案1

这里有一个简单的解决方案,运行中的命令Powershell,记得先备份!

首先获取第一个目录中的文件列表(好的)
0:$goodfiles = (Get-ChildItem -Path C:\Users\DBB\Pictures\GoodPics -Name)
将路径更改为您想要的路径!
(注意:为了方便起见,如果好文件夹中有非 jpeg 文件,您也可以在此处使用“Pattern”参数)

然后,切换到想要过滤的目录:
1:cd C:\Users\DBB\Pictures\UnfilteredPics
将路径更改为您想要的路径!

删除同名项:
2:foreach ($f in $goodfiles) {rm -f $f}

删除相应的 RAW 文件(如果您愿意):
3:foreach ($f in $goodfiles) {rm -f $f.replace('.jpg', '.raw')}


解释:

  1. 获取好文件列表 - 仅获取其名称(-Name),将其存储在$goodfiles
  2. 切换目录
  3. 强制删除每个与任何文件同名的文件$goodfiles- 强制(rm 中的 -f),这样如果不存在,就不会出现错误
  4. 删除相应扩展名为 .RAW 而不是 .JPG 的文件(请注意,1.jpg好的文件会导致1.raw文件被删除,而不是1.jpg.raw

可复制的、语法高亮的代码:

# Get a list of the good files - just their names (-Name), store it in $goodfiles
$goodfiles = (Get-ChildItem -Path C:\Users\DBB\Pictures\GoodPics -Name)
# Switch directory
cd C:\Users\DBB\Pictures\UnfilteredPics
# Forcefully remove each file with the same name as any file in $goodfiles - forcefully (-f in rm) so that if it doesn't exist, there won't be an error
foreach ($f in $goodfiles) {rm -f $f}
# Remove files with corresponding extension as .RAW instead of .JPG (note that 1.jpg good file will cause 1.raw file to be removed, not 1.jpg.raw)
foreach ($f in $goodfiles) {rm -f $f.replace('.jpg', '.raw')}

相关内容