所以我有一个包含很多子文件夹的文件夹(大约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文件)
我真的希望得到一个解决方案,谢谢!
答案 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
。如果存在则删除它。