1

ディレクトリ内のすべてのファイルと、一部のファイル拡張子と一致しないサブフォルダーを含む単純なバッチ ファイルを作成しようとしています。

ロジックは次のようになります。

GOTO directory
delete !(.avi, .mkv, .mp4)

これは簡単だと思いましたが、何度も試してみましたが、うまくいきませんでした!

4

3 に答える 3

1

この質問は、サブディレクトリからも削除したいことを除けば、Delete *.*とほぼ同じです。上位2つの回答の次の適応のいずれかが機能するはずです。

次の両方は、バッチ スクリプトが削除されるフォルダー階層にないことを前提としています。

@echo off
for /f %%F in ('dir /s /b /a-d "yourDirPath\*"^| findstr /vile ".avi, .mkv, .mp4"') do del "%%F"

.

@echo off
setlocal EnableDelayedExpansion
set "exclude=.avi.mkv.mp4."
for /r "yourDirPath" %%F in (*) do if /I "%exclude%" == "!exclude:%%~xF.=!" del "%%F"


スクリプトが階層内にある場合は、追加の IF ステートメントで問題を解決できます。

@echo off
for /f %%F in ('dir /s /b /a-d "yourDirPath\*"^| findstr /vile ".avi, .mkv, .mp4"') do if "%%~fF" neq "%~f0" del "%%F"

.

@echo off
setlocal EnableDelayedExpansion
set "exclude=.avi.mkv.mp4."
for /r "yourDirPath" %%F in (*) do if /I "%exclude%" == "!exclude:%%~xF.=!" if "%%~fF" neq "%~f0" del "%%F"
于 2012-11-07T13:13:31.147 に答える
1
@echo off
for /r C:\test %%a in (*) do (
if not %%~xa==.avi (
    if not %%~xa==.mkv (
        if not %%~xa==.mp4 (    
            del /f /q "%%a"
        )
    )
)
)

if削除したくない拡張子の を繰り返します。

この回答はいくつかの拡張機能で機能しますが、それ以上の拡張機能がある場合は、こちらでより良い回答を見つけることができます。

于 2012-11-07T10:23:35.667 に答える
0

この質問に似ています:ワイルドカードに一致しないファイルを削除するにはどうすればよいですか?

FOR /R [directory] %%F IN (*.*) DO IF NOT "%%~xF" == ".[extension]" DEL /F /S "%%F"
于 2012-11-07T10:49:08.397 に答える