Windowsサーバーで特定のフォルダ、ファイルを除いてデータを削除したい場合があると思います。
Windowsでファイルを削除する場合のコマンドとして、delやフォルダを削除するコマンドとしてrmdirがありますが、このコマンドはinclude、excludeという引数がないので、除外をするのが難しいです。
コマンドプロンプトによるコマンドは制限が多いのですが、Powershellだとより細かい引数を指定する事ができます。
そこで、Powershellを利用した特定のフォルダ、ファイルを除いてデータを削除する方法を紹介します。ちなみに、使用するコマンドは「Remove-Item」になります。
詳細は以下のマイクロソフトの公開情報を参考にしてください。
>>Remove-Item コマンドレットの使用(マイクロソフト)
https://docs.microsoft.com/ja-JP/previous-versions//ee176938(v=technet.10)?redirectedfrom=MSDN
まず、powershellを起動します。
例えば、指定したファイルを削除する場合は以下のようになります。shareフォルダ内のtest.txtを削除するコマンドです。
PS C:\> Remove-Item c:\share\test.txt
続いて、shareフォルダ内のすべてのデータを削除したい場合は、「*」ワイルドカードが使用できます。
PS C:\> Remove-Item c:\share\*
ちなみに上記コマンドを実行すると確認メッセージが表示されます。このメッセージを表示させたくない場合は、Recurseを引数とします。
確認
C:\scripts の項目には子があり、Recurse パラメータが指定されていませんでした。
続行した場合、項目と共にすべての子が削除されます。続行しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
PS C:\> Remove-Item c:\share\* -Recurse
また、除外したいファイルやデータがある場合は、[-Exclude]の引数が利用できます。
例えば、ちょっと工夫してshareフォルダの複数のテキストファイルを除いてすべてのデータを削除する方法です。
PS C:\> Remove-Item c:\share\* -Exclude test.txt,test2.txt -Recurse
powershellのコマンドは意外と使いやすいので、コマンドプロンプトではやりたいことの実現が難しい場合に便利ですね。
また、powershellをログオン、ログオフ時に実行した場合は、ログオン、ログオフスクリプトに組み込むことも可能です。