2017-03-21 100 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