2016-05-18 21 views
0

で、私は、ファイルの拡張子に番号が含まれているすべてのファイルを削除したい - 私の場合、ファイルは次のようになります。バッチファイル/ Windowsの:番号付きのファイル削除ファイル拡張子

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

私は(単純に)試してみましたdel *.*[0-9]*しかし(もちろん)運がない。 Windows 7システムを使用していますが、管理者権限がありません。すべての答えのためのhttps://tex.stackexchange.com/questions/310238


ありがとう:質問がラテックスフォーラムでの私の質問に関連している - ただ、情報として

私は受け入れなければならないと言うのは難しいです。

+0

[PowerShell](https://msdn.microsoft.com/en-us/powershell)は、すべてのWindows 7システムにプリインストールされています。 PowerShellスクリプトは、Windowsバッチスクリプトよりもはるかに簡単に作成できます。それはオプションですか? – IInspectable

+0

@IInspectableそれは大丈夫でしょう! –

答えて

2

私は次のようにすることを行うだろう:

@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 

をこのバッチプログラムを使用するには、提供引数としてファイルマスク。あなたがそれを与えなければ、現在のディレクトリが列挙されます。

delのスイッチがテスト目的で追加されているため、プロンプトが表示されないようにするには、単に削除してください。 /Fスイッチは、読み取り専用ファイルを強制的に削除します。あなたがそれを望まないなら、それも削除してください。


私は上記の話をしていたファイルマスクは、それぞれ、文字の配列、または単一の文字のために立って、世界的なワイルドカード*だけ?をサポートする、唯一のdirコマンドです。このMicrosoftの記事:Using wildcard charactersも参照してください。

これにも応じて数字のみに一致するマスクを構築するための直接的な方法は、ありません:Command-prompt wildcards for digits?したがって

私は任意のファイルをフィルタするために、正規表現の小さなセットをサポートfindstrコマンドを使用しています純粋に数字のファイル拡張子を持っています。この便利なコマンドの詳細については、マイクロソフトの記事FindstrとサイトFINDSTRを参照してください。複数のフォルダ内のファイルを削除するには

@echo off 
setlocal EnableDelayedExpansion 

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

、ちょうどforコマンドに/Rスイッチを追加します。

+0

ファイルマスクの例はありますか?私は本当に初心者です。あなたは*を意味しますか? * 例えば? –

+0

特定のディレクトリ内のすべてのファイルを削除するには、 'C:\ TEMP'と言って、' C:\ TEMP'または 'C:\ TEMP \ *。*'を指定します。現在のディレクトリの '.txt'ファイルを扱うには' * .txt'か '。\ *。txt'を使います。 '*'は任意の数の有効な文字を意味します。 '?t.txt'のように' test.txt'、 'text.txt'または' te0t.txt'と一致する有効な文字を表す '?'を使うことができます。 – aschipfl

+0

そして、どうもありがとうございます - これはたくさんの努力のようです。私はそれを試してみる。 –

1

PowerShell(Windows 7に付属)を使用する場合は、正規表現パターンを使用できます。一つの長い形式のアプローチです:

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

(そのパターンは数が含まれている拡張子と一致、または完全に数字と他には何もあり拡張を一致させるために'^\.\d+$'を使用します-WhatIfフラグはそれ非破壊それそうなります。それが何を削除するかを指示し、そのフラグを削除して実際に実行させる)。

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

ありがとうございます - 両方のソリューションのために! –

1

は、PowerShellは私はバッチファイルのアプローチをしなければならなかったならば、それはかもしれない、よりよいより簡単に、そしてより強力であることを言った:短縮形でこれを書くための方法、例えば一握りがあります

次のとおりです。

@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 

メッセージを表示せずに削除するには、/Pを削除します。

おそらく、1つ以上の一時ファイルなしでこれを行うことができますが、これは十分簡単です。ただし、これはすべてのファイルが1つのフォルダにあり、同じフォルダにある場合にのみ機能します。 (PowerShellのバージョンでは、サブフォルダとの連携がより簡単になります)。

[編集:それは名前にスペースを持つファイルを扱うことができるように「for」ループ調整]

2

このソリューションは0より大きい数値の拡張子を持つすべてのファイルを削除します。

+0

'.1!'や '!!2'のような拡張子を持つファイルも削除しますが、いい考えです。 – aschipfl

関連する問題