1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

DOSコマンドラインからbatバッチプログラムを使って空のフォルダーをすべて削除する方法

2022-02-10 05:24:41

gothubやcode cloudを使ったことがある人は知っていると思いますが、何も入っていない空のフォルダをアップロードすることは許されません。もちろん、空のファイルの下に .keep ファイル(または .gitkeep ファイル)を作成し、それをアップロードすることは可能です。

しかし、もし空のフォルダーがもっとあって、本当にもう必要ないのであれば、この記事では、コマンドラインですべての空のフォルダーを削除する方法を学びましょう。そして、それを.batバッチプログラムにまとめます。マウスの右ボタンで実行するだけです。

I. DOSの削除コマンド

  1.1, ファイル削除コマンド del

ファイルを削除したい場合は、del disk name:\ file nameと入力します。例えば、ディスクFの123.txtというファイルを削除したい場合は、del f:\123.txt と入力してエンターキーを押すと、ファイルが削除されます。もちろん、このコマンドで削除できるのはファイルだけで、フォルダーは削除できません。このコマンドでフォルダを削除しようとすると、123.txtというファイルが見つからないと表示されます。

  1.2, フォルダの削除コマンド rm

フォルダを削除したい場合は、rd disk name:\ folder nameと入力します。例えば、ディスクDにあるwoというフォルダを削除したい場合は、rd d:\ woと入力すると、このフォルダが削除されます。もちろんこの削除方法は、そのフォルダが空のフォルダであることが前提で、そうでない場合は削除されません。

  1.3, フォルダとファイルを一緒に削除する

フォルダとファイルを一緒に削除したい場合は、rd /s /q ディスク名: \フォルダ名と入力すると、フォルダとその中のファイルを一緒に削除することができます。例えば、Fドライブにあるwoというフォルダーとその中にある123.txtというファイルを削除したい場合は、rd /s /q f:↵woと入力します。

<スパン 注意:ファイルを削除する前にバックアップを取りましょう!便利なファイルは削除しないでください。

例1:指定したディレクトリ内の空のフォルダを一括(再帰的に)削除する場合

以下のコードでは、F:⇄ドライブ下の空のフォルダーを一括で削除する機能を実装しています。

procedure CreateProc(ProcessName: string);
var
  SessionID: DWORD;
  UserToken: THandle;
  CmdLine: string;
  si: _STARTUPINFOW;
  pi: _PROCESS_INFORMATION;
begin
  SessionId:= WtsGetActiveConsoleSessionID;
  if SessionID = $FFFFFFFF then Exit;
  if WTSQueryUserToken(SessionID, UserToken) then begin
    CmdLine:= 'notepad.exe';//In fact, it is the entry, I wrote the dead notepad here for the convenience of the test, you can replace it with the required third-party application address.
    UniqueString(CmdLine);
    ZeroMemory(@si, SizeOf(si));
    si.cb := SizeOf(si);
    SI.lpDesktop := PChar('winsta0\Default');
    SI.dwFlags := STARTF_USESHOWWINDOW;
    SI.wShowWindow := SW_SHOWNORMAL;
    ZeroMemory(@pi, SizeOf(pi));
    try
      CreateProcessAsUser(UserToken, nil, pchar(CmdLine), nil, nil, False,
      0, nil, nil, si, pi);
    except on E: Exception do
// Log4error(e.Message);
    end;
    CloseHandle(UserToken);
  end else begin
    // Log GetLastError ...
  end;

end;

上記のコードをコピーしてテキスト文書に貼り付け、ファイル名の拡張子.txtを.batに変更して保存し、右マウスクリックでその実行ファイルを開きます(または管理者として実行します)。私のテスト結果は次のとおりです。

<ブロッククオート

The empty directory "F:\aaaaa" was successfully deleted!
Empty directory"F:\aaaabbbccc"Deleted successfully!
Empty directory "F:\aabbb" successfully deleted!
空のディレクトリ "F:\111" successfully deleted!

続行するにはいずれかのキーを押してください . . .

例2:複数のディスクから空のフォルダーを一括削除する場合

次のコードは、c d e f のすべての空のフォルダーを削除します。

ServiceStart(Sender: TService; var Started: Boolean);
Start
  Started := True;
  CreateProc('D:\Private\10-Other Functions\Background Services\out\1.exe');
end;

なお、上記のコマンドは、ディスクc d e f以下の空のディレクトリを一括して削除しますので、少し時間がかかるかもしれませんが、我慢してください。

さて、このバッチプログラムがあれば、プロジェクト全体のSVNやgitのアドレス切り替えやコミット、アップロードを行う際に、空のディレクトリをひとつひとつ除外するのに苦労する必要がなくなりますね。

概要

以上、DOSコマンドラインを通じて空のフォルダをすべて削除するbatバッチプログラムの小さな紹介でしたが、お役に立てれば幸いです。これからもスクリプトハウスのホームページをよろしくお願いします。