根据文件名删除某些文件类型

时间:2017-03-21 19:55:50

标签: windows file sorting types

所以我有一个包含很多子文件夹的文件夹(大约1000个) 这些子文件夹有.bmp .jpg .png和.tga文件。

我需要删除所有.tga文件 IF

在同一个(子)文件夹中同名的.jpg或.png文件

示例

Folder1中

  • street.bmp

  • street.png

  • street.tga< - 因为.png删除tga

FOLDER2

  • road.bmp

  • road.tga< - 请勿删除tga,因为没有相同的.png或.jpg文件,只有.bmp

    *

(每个文件夹都有那些总是与tga文件命名相同的.bmp文件)

我真的希望得到一个解决方案,谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用FOR命令使用两个批处理文件命令完成此操作:

输入" FOR /?"从命令提示符中查看命令语法:

首先更改包含图片的目录:

C:\> cd /d "D:\Pictures"
D:\Pictures>

然后在你的" D:\ Pictures"文件夹,运行以下两个命令:

for /r %f in (*.tga) do if exist "%~df%~pf%~nf.png" del "%f"
for /r %f in (*.tga) do if exist "%~df%~pf%~nf.jpg" del "%f"

在测试这样的命令时请小心,最好在做好备份之后!你已被警告过了。

命令细分: for(for command)

/r      Recurse subdirectories
%f      Variable used to represent each matching file
(*.tga) File Spec to search for
do       part of for command, following command executed for each match
if exist XXX del XXX

~d between the %f (%~df), returns only the drive (d:)
~p between the %f (%~pf), returns only the path (\path\)
~n between the %f (%~nf), returns only the filename without extension
...then appending .png or .jpg to end of those...
~f returns the full filename, including path

此外,如果您需要在批处理文件中放置这样的命令,则需要将变量名称上的百分号加倍,例如:

for /r %%f in (*.tga) do if exist "%%~df%%~pf%%~nf.png" del "%%f"
for /r %%f in (*.tga) do if exist "%%~df%%~pf%%~nf.jpg" del "%%f"

答案 1 :(得分:0)

这是powershell脚本:

Get-ChildItem -recurse "C:\MyFolder" -Include @("*.png","*.jpg") | 
Foreach-Object {

$strName=$_.BaseName+".tga"
$pngFile=$_.FullName   
$tgaFile=$_.DirectoryName+"\"+$strName

If (Test-Path $tgaFile){
  Remove-Item $tgaFile  
}

}

简而言之:找到所有.png.jpg个文件(递归),并检查每个文件是否存在.tga。如果存在则删除它。