2017-03-21 24 views
1

So habe ich einen Ordner, der viele Unterordner (ca. 1000) enthält Diese Unterordner hat .bmp .jpg .png und .tga-Dateien.Löschen Sie bestimmte Dateitypen, basierend auf Dateiname

Ich brauche alle .tga Dateien löschen IF:

in der gleichen (Unter-) Ordner dort gleichnamigen .jpg oder .png-Datei

Beispiel

Folder1

  • street.bmp

  • street.png

  • street.tga < - tga löschen wegen .png

Folder2

  • road.bmp

  • road.tga < - nicht löschen tga, weil es nicht gleichnamigen .png oder .jpg-Datei, nur

    *

.bmp (Jeder Ordner hat diese .bmp-Dateien, die sind immer die gleichen Namen wie die TGA-Dateien)

Ich hoffe wirklich, eine Lösung zu bekommen, danke!

+0

Willkommen bei Stack Overflow. Bitte nehmen Sie die 2-minütige [Tour]. Darüber hinaus öffnen Sie [Hilfe] und lesen Sie mindestens [fragen]. Bearbeite dann deine Frage, um eine [mcve] zur Verfügung zu stellen. Fragen, die nur nach Code fragen, sind zu weit gefasst und werden wahrscheinlich zurückgestellt oder geschlossen (http://stackoverflow.com/help/closed-questions). – JosefZ

+0

Falls Sie nicht mit 'powershell' vertraut sind - Es ist Microsofts Ersatz für' Dos' type 'command prompt'. So können Sie 'Powershell' aus Ihrem Programmmenü ausführen, die unten angegebene Lösung kopieren und einfügen, die Eingabetaste zweimal drücken - und das Skript wird ausgeführt ... – Plirkee

Antwort

0

Hier ist powershell Skript:

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 
} 

} 

Kurz gesagt: finden Sie alle .png oder .jpg Dateien (rekursiv) und für jede überprüfen, ob .tga existiert. Wenn vorhanden, löschen Sie es.

+0

Dies funktionierte wie ein Charme das erste Mal, als ich es versuchte! Vielen Dank! – user6681334

0

Sie erreichen dies mit zwei Batch-Datei Befehle der FOR-Befehl: „FOR /“

Typ von der Eingabeaufforderung die Befehlssyntax, um zu sehen:

Erster Wechsel in das Verzeichnis Ihrer Bilder enthalten:

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

Dann in Ihrem „D: \ Pictures“ -Ordner, führen diese beiden Befehle:

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" 

Bitte seien Sie vorsichtig beim Testen von Befehlen wie dieser und vorzugsweise nach einer guten Sicherung! Du wurdest gewarnt.

Aufteilung der Befehle: für (für Befehl)

/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 

Auch, wenn Sie einen Befehl wie diesen in einer Batch-Datei setzen müssen, müssen Sie die Prozentzeichen auf dem Variablennamen verdoppeln wie:

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

Ich konnte nur 1 Datei mit diesem und 19 weitere löschen, wenn ich die Variable/r wurde entfernt. Ich überprüfte die Ordner und es scheint, als ob nur Bilder gelöscht wurden, die sich direkt im Hauptordner "Bilder" befanden. Aber wie gesagt, der Ordner "Bilder" hat fast 1000 Unterordner, und diese Kommandozeile muss auch dorthin reichen. – user6681334

+0

@ user6681334, habe ich meine Antwort aktualisiert, ich habe vergessen, Laufwerksbuchstaben (% ~ df) einzuschließen. Lass es mich wissen, wenn das immer noch nicht funktioniert. –

+0

Diesmal tut es etwas länger, und ich sehe den Pfad und den Namen der TGA-Dateien blinken (wie beim letzten Mal). Allerdings kann ich kaum eine Nachricht zwischen den Zeilen sehen, die so etwas wie "Kann die angegebene Datei nicht finden" blinkt. Ich überprüfte die Ordnergröße und es blieb genau das gleiche. – user6681334

Verwandte Themen