コマンドプロンプトから指定したフォルダ内の全てのファイル/サブフォルダを削除する方法を教えてください
Windows7のバッチファイル内の全てのファイル/サブフォルダを削除して、一番上のフォルダを残しておきたいのですが、どのようにすればいいでしょうか?基本的にはフォルダを空にします。そのためのコマンドライン命令を教えてください。
Windows7のバッチファイル内の全てのファイル/サブフォルダを削除して、一番上のフォルダを残しておきたいのですが、どのようにすればいいでしょうか?基本的にはフォルダを空にします。そのためのコマンドライン命令を教えてください。
解決策:例えば、親ディレクトリの「C:Us\Desktop」のファイルとサブディレクトリを削除したい。簡単な方法は、以下の3つのコマンドでバッチファイルを作成することだ。
cd C:Illustratorの「C:Illustrator」フォルダを削除する
del * /S /Q
rmdir /S /Q “C:Illustrator」フォルダを削除する
ここでは、まず、全てのファイルを削除して、次に、空のフォルダを削除する。現在の作業ディレクトリは、親ディレクトリである”\New folder “なので、このディレクトリを削除することはできません。
親ディレクトリに移動する:
pushd "Parent Directory"
サブフォルダを削除する:
rd /s /q . 2>nul
このように、ファイルとサブフォルダを削除するために rmdir を使用することができます:
rmdir /s/q MyFolderPath
しかし、それはかなり高速です、特にあなたの構造の中で多くのサブフォルダを持っている場合は、このように rmdir の前に del を使用するには、次のように:
del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
すべてのサブフォルダを含むフォルダ内のすべてのファイルを削除し、ルートフォルダをそのまま維持するためにいくつかのエラー条件に依存しないようにしたい場合(別の回答で見たように)、次のようなバッチファイルを持つことができます:
@echo off
REM Checking for command line parameter
if "%~1"=="" (
echo Parameter required.
exit /b 1
) else (
REM Change directory and keep track of the previous one
pushd "%~1"
if errorlevel 1 (
REM The directory passed from command line is not valid, stop here.
exit /b %errorlevel%
) else (
REM First we delete all files, including the ones in the subdirs, without confirmation
del * /S /Q
REM Then we delete all the empty subdirs that were left behind
for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"
REM Change directory back to the previous one
popd
REM All good.
exit /b 0
)
)
そして、あなたは単にそれを呼び出すことができます:
empty_my_folder.bat "C:\whatever\is\my folder"
ファイルを削除するには:
del PATH_TO_FILE
すべてのファイルを含むフォルダを削除するには:
rmdir /s /q PATH_TO_FOLDER
特定のフォルダからすべてのファイルを削除するには(フォルダ自体を削除するのではなく)少し複雑です。そのため、
del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
の2つのコマンドが必要になります。 このようなスクリプトを作成することで、任意のフォルダやファイルを削除することができます。
これは、フォルダ名にスペースがある場合にうまく機能しました。
user340956 はこの解決策にかなり近づいていたのですが、 近いとは何を言うか知っていますよね…
明確にしておくと、rd /s /q c:\foobar
はターゲットディレクトリの内容に加えて、 ターゲットディレクトリを削除しますが、常にディレクトリ自体を削除したいわけではなく、 ディレクトリの内容を削除して、ディレクトリだけにしておきたい場合もあります。しかし、Micrsoft は、その無限の「知恵」の中で、このコマンドを削除して Windows に移植しませんでした。
サードパーティのツールに頼らなくても動作する解決策があります。実際の実行ファイルを書くのではなく、コマンドラインスクリプトで可能な限りシンプルで効率的です。環境変数を設定せず、ループも使用しません。また、可能な限り安全であり、可能な限りエラーチェックを可能な限り行っています。
deltree
(子供用には dt.bat
; 私は年寄りなので dt.cmd
を使います):
:: dt is a Windows-compatible version of the deltree command
:: Posted to SuperUser by Synetech: https://superuser.com/a/1526232/3279
@echo off
goto start
:start
if ["%~1"]==[""] goto usage
pushd "%~1" 2>nul
if /i not ["%cd%"]==["%~1"] goto wrongdir
rd /s /q "%~1" 2>nul
popd
goto :eof
:usage
echo Delete all of the contents of a directory
echo.
echo ^> %0 DIR
echo.
echo %0 is a substitute for deltree, it recursively deletes the contents
echo (files and folders) of a directory, but not the directory itself
echo.
echo DIR is the directory whose contents are to be deleted
goto :eof
:wrongdir
echo Could not change to the target directory. Invalid directory? Access denied?
goto :eof
以下のように動作します。2. カレントディレクトリを保存してからターゲットディレクトリに切り替え、エラーはすべて .bat
にリダイレクトすることで、よりクリーンなコマンドライン環境を実現します (そしてログもクリーンになります)。002 3. カレントディレクトリがターゲットディレクトリと同じかどうかをチェックして、そうでない場合はエラーメッセージを表示して終了します。これにより、pushd
コマンドが失敗した場合に、誤って前のディレクトリの内容を削除してしまうことを防ぐことができます (例。
- このチェックは大文字小文字を区別しないので、Windows 上では usually 安全ですが、Windows 上であっても、*nix システムで使用されているような大文字小文字を区別するファイルシステムには適用されません。短いファイル名ではないファイル名を使わなければならないのは少し不便ですが、特に SFN は完全に信頼できるものではないし、常に予測可能なものではないので (完全に無効化されている可能性もあります)、後悔するよりは安全な方が良いでしょう。これに関するいくつかの注意点:
- ターゲットディレクトリはカレントディレクトリなので、システムはファイルハンドルをオープンにしているので、実際に削除することはできません。
- ターゲットディレクトリの内容が削除されるまでは削除しようとしないので、(開いているファイルハンドルを持つもの以外は)空になるはずです。
5.最後に、nul
を使って以前のカレントディレクトリに戻り、スクリプトを終了します。