2017-03-21 67 views
1

所以我有一个文件夹,其中包含大量的子文件夹(约1000) 这些子文件夹有.bmp .jpg .png和.tga文件。删除某些文件类型,基于文件名

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

在同一个(子)文件夹中有

同名.jpg或.png文件

文件夹1

  • street.bmp

  • street.png

  • street.tga < - 删除,因为png格式的TGA

文件夹2

  • road.bmp

  • road.tga < - 不要删除TGA因为没有同名巴纽或.jpg文件,只有.BMP

    *

(每个文件夹中都有这些.bmp文件,其总是命名为相同的tga文件)

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

+0

欢迎来到Stack Overflow。请参加2分钟的[游览]。 此外,打开[帮助]并至少阅读[问]。然后,[编辑]你的问题提供[mcve]。 只询问代码的问题过于宽泛,很可能会[搁置或关闭](http://stackoverflow.com/help/closed-questions)。 – JosefZ

+0

如果你不熟悉'powershell'-这是微软替代'Dos'类型'命令提示符'。所以你可以从你的程序菜单运行'powershell',复制粘贴我下面提供的解决方案,点击输入两次 - 脚本将运行... – Plirkee

回答

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。如果存在,则删除它。

+0

这个工作就像第一次尝试它时的魅力!非常感谢! – user6681334

0

您可以使用两个批处理文件命令命令做到这一点:“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" 

测试这样的命令时请小心,最好在做好备份之后!你已被警告。将对于(命令)

/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" 
+0

我设法删除只有一个文件与此,当我19删除了/ r变量。我检查了这些文件夹,似乎它只删除了直接位于主“图片”文件夹下的图片。但就像我说的那样,'图片'文件夹里面有近1000个子文件夹,这个命令行也必须到达那里。 – user6681334

+0

@ user6681334,我更新了我的答案,忘记了包含驱动器号(%〜df)。让我知道如果这仍然行不通。 –

+0

这一次它做的更长一些,我可以看到tga文件的路径和名称闪烁(像上次一样)。但是,我几乎看不到闪烁的行之间的消息,如“无法找到指定的文件”之间的消息,我检查了文件夹的大小,并保持完全相同。 – user6681334