2016-05-18 4 views
0

ich alle Dateien löschen möchten, die eine Nummer in der Dateierweiterung enthalten - in meinem Fall die Dateien wie folgt aussehen:Batch File/Fenster: Löschen von Dateien mit Nummer in der Dateierweiterung

FileName.1 
FileName.2 
FileName.3 
... 

I (naiv) versucht del *.*[0-9]* aber (natürlich) kein Glück. Ich verwende ein Windows 7 System, wo ich keine Administratorrechte habe.

Nur als Info - wird die Frage auf eine Frage von mir im Zusammenhang in einem Latex-Forum: https://tex.stackexchange.com/questions/310238


Dank alle für die Antworten. Es ist schwer für mich zu sagen, was ich akzeptieren soll.

+0

[PowerShell] (https://msdn.microsoft.com/en-us/powershell) ist auf allen Windows 7-Systemen vorinstalliert. Ein PowerShell-Skript ist so viel einfacher zu schreiben als ein Windows-Batch-Skript. Wäre das eine Option? – IInspectable

+0

@Intspectable Das wäre in Ordnung! –

Antwort

2

ich tun würde, dass Sie wie folgt vor:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

set "FILEMASK=%~1" 
for /F "eol=| delims=" %%F in (' 
    dir /B /A:-D "%FILEMASK%" ^| findstr /R "\.[0-9][0-9]*$" 
') do (
    del /P /F "%%~F" 
) 

endlocal 
exit /B 

dieses Batch-Programm verwenden zu können, bieten die Dateimaske als Argument. Wenn Sie nicht angeben, wird das aktuelle Verzeichnis aufgelistet.

Der Schalter /P bei dem Befehl del wird zu Testzwecken hinzugefügt. Wenn Sie also keine Eingabeaufforderungen anzeigen möchten, entfernen Sie sie einfach. Der Schalter /F erzwingt das Löschen von schreibgeschützten Dateien. Wenn du das nicht willst, entferne es auch.


Die Dateimaske ich oben im Gespräch bin, ist für den dir Befehl nur, die die globale Platzhalter * und ? nur unterstützt, für eine Folge von Zeichen oder ein einzelnes Zeichen, respectively. Siehe auch diesen Microsoft-Artikel: Using wildcard characters.

Es gibt keine direkte Möglichkeit, eine Maske zu erstellen, die nur Ziffern übereinstimmt, auch nach diesem: Command-prompt wildcards for digits?

deshalb ich bin mit dem findstr-Befehl, der einen kleinen Satz von regulären Ausdrücken unterstützt, alle Dateien filtern die eine rein numerische Dateierweiterung haben. Weitere Informationen zu diesem nützlichen Befehl finden Sie im Microsoft-Artikel Findstr und auf der Website FINDSTR.

+0

Können Sie ein Beispiel für die Dateimaske angeben? Ich bin wirklich ein Anfänger. Meinst du *. * beispielsweise? –

+0

Wenn Sie alle Dateien in einem bestimmten Verzeichnis löschen möchten, sagen Sie 'C: \ TEMP' und geben Sie' C: \ TEMP' oder 'C: \ TEMP \ *. *'; Um '.txt' Dateien im aktuellen Verzeichnis zu adressieren, benutzen Sie' * .txt' oder '. \ *. txt'; das "*" bedeutet eine beliebige Anzahl von gültigen Zeichen; Sie können '?' verwenden, um ein einzelnes gültiges Zeichen darzustellen, wie zum Beispiel 'te? t.txt', das mit' test.txt', 'text.txt' oder' te0t.txt' übereinstimmt, zum Beispiel ... – aschipfl

+0

And vielen Dank - das sieht nach viel Aufwand aus. Ich werde es ausprobieren. –

1

Wenn Sie bereit sind, PowerShell (das mit Windows 7 geliefert wird) zu verwenden, können Sie Regex-Muster verwenden. Ein langer Form Ansatz ist:

Get-ChildItem "d:\folder\" | where { $_.Extension -match '[0-9]' } | Remove-Item -Whatif 

(Dieses Muster wird Erweiterungen entsprechen, die eine Zahl enthalten, oder verwenden Sie '^\.\d+$' Erweiterungen übereinstimmen, die sind ganz Zahlen und nichts anderes Der -WhatIf Flagge macht es zerstörungsfrei, damit es. sagt Ihnen, was es entfernen würde, entfernen Sie dieses Flag, um es für real laufen zu lassen).

eine Handvoll Möglichkeiten Es gibt diese in Kurzform zu schreiben, zum Beispiel:

gci "d:\folder\" |? { $_.Extension -match '\d' } | rm 
+1

Vielen Dank - für beide Lösungen! –

1

Having said, die Powershell ist schöner, leichter und leistungsstärker, wenn ich eine Batch-Datei Ansatz zu tun hatte, es könnte sein:

@Echo Off 

rem List all filenames into a temp file 
dir /b > tmpFileList.txt 

rem Isolate filenames which end in numbers into another temp file 
findstr /R "\.[0-9][0-9]*$" tmpFileList.txt > tmpFileList2.txt 

rem Run through the second temp file, and delete those filenames 
for /f "delims=" %%L in (tmpFileList2.txt) do (
    del /P "%%L" 
) 

rem cleanup 
rm tmpFileList.txt 
rm tmpFileList2.txt 

die /P entfernen zu löschen, ohne zu fragen.

Sie könnten dies wahrscheinlich ohne eine oder mehrere der temporären Dateien tun, aber das ist einfach genug. Dies funktioniert jedoch nur, wenn sich alle Dateien in einem Ordner befinden und Sie sich im selben Ordner befinden. (Die PowerShell-Version lässt sich leichter mit Unterordnern arbeiten).

[Edit: die ‚für‘ Schleife so eingestellt, dass es Dateien mit Leerzeichen im Namen verarbeiten kann]

2

Diese Lösung alle Dateien mit einer numerischen Erweiterung größer ist als 0 löschen:

@echo off 
setlocal EnableDelayedExpansion 

for %%a in (*.*) do (
    set "ext=%%~Xa" 
    set /A "ext=!ext:~1!" 
    if !ext! neq 0 del "%%a" 
) 

Um Dateien in mehreren Ordnern zu löschen, fügen Sie einfach /R Schalter auf for Befehl.

+0

Gute Idee, +1, obwohl es auch Dateien mit Erweiterungen wie '.1!' oder '.! 2' löscht ... – aschipfl

Verwandte Themen