10

コマンド ラインを使用して、特定の種類のファイル (.zip ファイルなど) をフォルダーとそのすべてのサブフォルダーから削除する必要があります。理想的には、Windows で .bat ファイルとして実行できるものを探しています。

DEL コマンドがサブフォルダーを検索するための /S スイッチがあることは知っていますが、課題を追加するには、特定の名前のファイル (例として "Backup.zip") を除外する必要があります。

ファイルを再帰的に削除するが、特定の名前のファイルを除外する方法はありますか? 私の状況では、削除したいすべてのファイル名を明示的にリストし、削除したくないタイプのファイルのみを明示的にリストすることは実用的ではありません。

4

7 に答える 7

8

良いトリック:除外したいファイルを読み取り専用にします!

DEL /S読み取り専用ファイルは削除されません。

次のスクリプトは、あなたが望んでいることとまったく同じではありませんが(以下の私のコメントを参照してください)、読み取り専用ファイルを使用して削除を回避する方法を示しています。

@ECHO OFF
:: This example supposes your first parameter is
:: the relative path to the folder to be deleted
:: and the second is the relative path (from the
:: the target folder) of the one to be excluded
:: Notice that this will only work if the folders
:: are in the working drive, if not, you ll
:: have to specify full paths

IF "%1"=="" GOTO ERROR
IF "%2"=="" GOTO ERROR
IF NOT EXIST %1\NUL GOTO ERROR
CD %1
IF NOT EXIST %2\NUL GOTO ERROR
ECHO Starting up the deletion process
ECHO. * Setting attributes
attrib %1\*.mp3 -r -s -h > NUL
attrib %2\*.mp3 +r > NUL
ECHO. * Deleting files
del /s %1\*.mp3
ECHO. * Reseting attributes
attrib %2\*.mp3 -r > NUL
ECHO.
ECHO Operation completed!
ECHO.
GOTO END

:ERROR
ECHO Parameters:
ECHO. Param1 -> target folder
ECHO. Param2 -> folder to be ignored
ECHO.
GOTO END

:END

注: サブフォルダーだけでなく、特定のタイプのすべてのファイルを無視するために、このスクリプトを適応させることができます。

attrib /S *.xxx +r > NUL

実際には、現在のディレクトリとすべてのサブディレクトリのすべての「xxx」ファイルを除外するのに役立ちます(したがって、/Sオプション)。


注: " > NUL" の部分は、標準出力を画面に表示する代わりに非表示にするためによく使用されるリダイレクトです。これはdeviceであり、すべてのデバイス ( 、、、および)と同様
であるため、(たとえば、さまざまなパスが関与する大きなループで) 頻繁に使用すると危険な場合があります。AUXCOMnLPTnNULPRN

  • デバイスを開くと、1 つのファイル ハンドルが要求されます。ただし、ファイルとは異なり、デバイスは再起動するまで閉じられません。
  • 各デバイスはすべてのドライブのすべてのディレクトリに存在するためNUL、たとえば へのリダイレクトを使用C:\し、その後 で再度使用するとC:\TEMP、別のファイル ハンドルが失われます。
于 2009-02-11T10:04:27.303 に答える
3

次のように、一連のファイルを簡単にループして、それぞれに対してコマンドを実行できます。

set match=D:\blah\M*.zip
for %%x in (%match%) do (
del %%x
)

次に、DOS で文字列を操作する方法に関するこの記事を読む必要があると思います: http://www.dostips.com/DtTipsStringManipulation.php

于 2009-02-11T09:50:09.243 に答える
3

こうするだけ、簡単

  1. Windows ボタン + r
  2. 入力cmdしてEnterキーを押します
  3. 親ディレクトリに移動:または(または移動先のドライブの文字) を
    入力します。c:d:
  4. 入力dirして、そのディレクトリの内容のリストをdir /ah表示します (隠しファイルを表示するには)
  5. ディレクトリを変更するには、次のように入力しますcd xxxx( xxxx = ディレクトリ名 )
  6. バッチ削除を実行するディレクトリに到達するまで、4&5 を繰り返します。
  7. 次に、パターンを入力します。次のようなもの:del /S /ah *.jpgそしてEnterキーを押します。すべてのサブディレクトリで実行され、.jpg ファイルであるすべての可視ファイルと非表示ファイルが削除されます

*   はワイルドカードです
/S   はすべてのサブフォルダから削除します
/ah   a = 属性に基づいてファイルを選択します、h = 非表示

例: Mac から Windows にコピーするときに表示される煩わしい .DS_Store ファイルを削除するには、次のコマンドを実行します。

del /S /ah .DS_Store

また

del /S /ah ._*

これにより、Mac から Windows にコピーするときにも作成される「重複した」隠しファイルがすべて取得されます。

于 2012-03-04T10:09:37.697 に答える
2

以下で簡単に使用できます。

forfiles /p C:\temp-new /s /c "cmd /c if @isdir==FALSE del @file"

TechNet リファレンスここにリンクの説明を入力

于 2011-11-11T16:40:58.627 に答える
1

おそらく、「forfiles」コマンドが役立つ可能性があります

http://technet.microsoft.com/en-us/library/cc753551.aspx

それが役立つことを願っています。

于 2009-02-11T09:40:33.727 に答える
1

このスクリプトは、フォルダー (およびサブフォルダー) からすべての .zip ファイルを削除しますが、ファイル名に「backup」、「Backup」、「BACKUP」などの単語が含まれていない場合のみです。

# Script DeleteZip.txt
var str folder, filelist, file
cd $folder
lf -r -n "*.zip" > $filelist
while ($filelist <> "")
do
    lex "1" $filelist > $file
    # Does this $file contain the word "backup" ? Do case independent search (-c option).
    if ( { sen -c "^backup^" $file } <= 0 )
        system del ("\""+$file+"\"")
    endif
done

スクリプトはバイタースクリプティング ( http://www.biterscripting.com ) です。スクリプトをファイル C:/Scripts/DeleteZip.txt に保存します。スクリプトを次のように実行します

script "C:/Scripts/DeleteZip.txt" folder("C:/testfolder")

フォルダー C:/testfolder とそのすべてのサブフォルダーに対して、すべてのレベルで削除操作を実行します。

于 2010-02-21T18:39:22.720 に答える