1つを除くすべてのファイルを削除するMS-DOSコマンド


25

1つを除くすべてのファイルを削除できるMS-DOSコマンドはありますか?

例として、次のファイルを検討してください。

a.001  
a.002  
a.003  
a.exe  
a.c  

を除くすべてのファイルを削除するコマンドはありますa.cか?

回答:


36

これforif実行するには、コマンドとコマンドを使用できます。

for %i in (*) do if not "%~i" == a.c del "%~i"

これは現在のディレクトリを調べ、各ファイル名をacと比較します。一致しない場合、ファイルは削除されます。


+1は、これを単純な削除に使用することを考えたことがありません...ここにたくさんの良い答えがあります!
ウィリアムヒルサム

4
@Wil、for定期的に使用を開始すると、あらゆる種類のクレイジーなシナリオを思い付きます。:)
ケビン

4
@Mike、「%i for(A:\ Some \ Path \ *)not if if%〜nxi == ac del%i」のようなものが必要です。パスが*で終わることに注意してください。 、および比較がパスなしの名前%〜nxiと比較されること。このような破壊的なforループについては、「for ... do if ... del%i」コマンドを実行する前に、「for ... do echo%i」を実行して影響を受けるファイルを確認することをお勧めします。
ケビン

1
より良い使用del "%i"
Mugen

1
IF大文字と小文字を区別しないステートメントが必要な場合は、に変更しIF /Iます。
jep

16

すべてを削除する前にファイルを読み取り専用に設定できます

attrib +r a.c
del *.*
attrib -r a.c

10

いいえ、ありません。ディレクトリを作成し、重要なファイルをその中にコピーして、消去します。、ファイルを元に戻します。次に、一時ファイルを削除します。

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1粗野で技術的に@Feiht泥棒は、それを行うより良い方法を言います(そこでも+1を与えました)が、速度のために、これが私がする方法です。
ウィリアムヒルサム

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
[]のメリットは何ですか?
-barlop

1
@barlop:%fファイル名にスペースを含めることができます。
パラドロイド

@paradroidいいえ、[4 r] == [4 r] echo equalの場合、それは役に立たないでしょう。の代わりに []。理由は推測できますが、そうする人から聞いてみたいと思います。
barlop

@barlop:そこに何を入力したかわかりませんが、角括弧は引用符と同じように機能します。
パラドロイド

@paradroid C:\> if [4 r] == [4 r] echo abc <ENTER>は、「r] == [この時点では予期しない4でした」という結果を返します。一方、C:\> if "4 r" == "4 r" echo abcは結果abcを返します。それでは、引用符のように機能するように思われる理由は何ですか?C:\> if [ab] == [ab] echo abc <-動作しない場合でも同様のエラーが発生します。b] == [aはこの時点では予想外でした。それで、何が引用符のように機能すると思いますか?
barlop

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

それが何をするのか説明されていれば、これはおそらく役立つと思います。それはフォルダツリー全体を横断しているように見えますが、それは私が望むものです。%app_path%および%file%は、それぞれ、トラバースするツリーのルート、および削除を回避するファイルです。とは何ですか?また^、ファイルごとに4つのトークンをDelコマンドに渡すのはなぜですか?
LarsH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.