複数のパーティションを持つ SSD があります。J:\ で作業する必要があり、次のフォルダーを除く J: 内のすべてのフォルダーを削除する必要があります。
J:\System Volume Information
J:\$RECYCLE.BIN
J:\New
J:\Old Stuff
そして次のサブフォルダー:
J:\Papers\Folder
J:\Room\Main Documents
J:\Year\Origin\Part
J:\Year\Origin\Part Two
いろいろ検索して読んだ後、次のコードを書きました。
@ECHO OFF
SETLOCAL
SET "sourcedir=J:\"
SET "keepdir=System Volume Information"
SET "keepdir=$RECYCLE.BIN"
SET "keepdir=New"
SET "keepdir=Old Stuff"
SET "keepdir=Papers\Folder"
SET "keepdir=Room\Main Documents"
SET "keepdir=Year\Origin\Part"
SET "keepdir=Year\Origin\Part Two"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
GOTO :EOF
残念ながら、上記のコードは機能しません (J: 内のすべてが削除されます)。
答え1
@echo off & cd /d J:\ || goto :eOf
for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
')do =;( type "%~f0" | 1>nul find /i "%%~fi"
);= || 1>nul 2>&1 rmdir /q /s "%%~fi"
goto :eof
:: Keep the list in the lines below the
:: full path of the folders that remained!
J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information
1.保持したいフォルダーのリストを含むバッチを使用します。
J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information
2.ループを使用してフォルダツリーを一覧表示する
for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
')do
3.ループ内の各フォルダーに対して、bat 自体のタイプを使用して、フォルダー/パスがそこに表示されるかどうかを確認します。
type "%~f0" | 1>nul find /i "%%~fi"
4.フォルダー/パスが見つからない場合 ( ||
)、削除します。
type ... find .. || rmdir /q /s "%%~fi"
5.ループを終了して、ファイルを終了します。
goto :eOf
さらに詳しい情報:
答え2
提案:
J:\> dir /s /b /ad >DirsToRemove.bat
リストに記入する全てJ: (現在のドライブ) の DIRS を DirsToRemove.bat ファイルに追加します。- そのファイルを編集するには、
メモ帳 (ワードパッドではありません) が使えますが、より高度なテキスト エディターを使用することをお勧めします。 - 各行で
rmdir /s /q
dirname の前に追加し、名前にスペース文字がある場合は
名前を引用符で囲みます。 すべての名前に引用符を使用することもできます。=>"
rmdir /s /q "name"
より高度なテキスト エディターではマクロを使用できます。マクロの使用は、記録を開始し、1 行を編集し、記録を停止するだけです。その後、ショートカット キーを使用して、必要な回数だけマクロを起動できます。 - 保持したいディレクトリを含む行は必ず削除してください。
- 保存して...
- する
J:\> .\DirsToRemove.bat
同じようなことを何度か繰り返して行うと、手元のタスクを完了するのに通常 1 ~ 2 分しかかかりません。