2017-01-02 8 views
0

ディスク容量をクリーンアップする単純なバッチファイルを作成しようとしています。私は4つの異なるディレクトリの内容(フォルダとファイル)全体を削除する必要がありますが、それらが存在する場合に限ります。私は1つを削除しようとしてテストしてきましたが、私はバッチファイルを書くことについて何も知らない。私がやったすべての研究の後、私はうまくいかないコードをいくつか考え出しました。複数のディレクトリの内容を削除する(バッチファイル)

このシナリオでは、TestSubFolderが存在する場合、TestSubFolderの内容を削除する必要があります。それが存在するかどうかにかかわらず、そのアクションが完了した後、私は同じことをTestSubFolder2に行うコードが必要です。

おかげ

+1

からだから、あなたは、彼らが存在する場合にのみ、フォルダの内容を削除したいです。存在しない場合、どのようにコンテンツを削除しますか?言い換えれば、内容が存在するかどうかをチェックせずに内容を削除するだけです... – aschipfl

答えて

1

あなたのコード内の主な問題はifコマンドの不適切な使用方法です。条件が真であれば実行するコマンドは1つだけであれば、同じ行に書くことができますが、次の行にコマンドを書くには括弧を使用する必要があります。それは

IF EXIST "C:\Windows\TestFolder\TestSubFolder\*.*" (
    DEL /s /q "C:\Windows\TestFolder\TestSubFolder\*.*" 
    for /d %%p in ("C:\Windows\TestFolder\TestSubFolder\*.*") do rmdir "%%p" /s /q 
) 

のようなものでなければなりません。しかし、これはある

2>nul pushd "C:\Windows\TestFolder\TestSubFolder" && (
    rmdir . /s /q 
    popd 
) 

は、私たちが指示されたフォルダ(pushd)に変更しようとして簡素化し、問題がなかった場合(条件付き実行演算することができます&&は、前のコマンドが失敗しなかった場合に次のコマンドを実行することを意味します)、フォルダのすべてのコンテンツを削除し(rmdir)、前のアクティブディレクトリ(popd)に戻ります。 2>nulは、エラーメッセージを隠すだけです(フォルダが存在しない、削除できないロックされたファイルなど)

ここで、複数のフォルダに対してプロセスを繰り返す必要がある場合は、このforループに以前のコードを配置するフォルダ

for %%a in ("folder1" "folder2") do .... 

のリストを反復するforコマンドを使用し

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    2>nul (
     for %%a in (
      "C:\Windows\TestFolder\TestSubFolder" 
      "C:\Windows\TestFolder\TestSubFolder2" 
     ) do pushd "%%~fa" && ( 
      rmdir . /s /q 
      popd 
     ) 
    ) 

エラーhiddingはすべてをカバーするために移動されている私たちがしています10実行後、それぞれのフォルダ(for置換可能パラメータ%%aで参照される)に対して、フルパス(%%~fa)を使用してフォルダに変更しようとしましたが、変更できる場合は、元のアクティブディレクトリに戻ります。

0
CD "C:\Windows\TestFolder\TestSubFolder" 
RD /s /q "C:\Windows\TestFolder\TestSubFolder" 

Works for me。

またはどこか

RD /s /q "C:\Windows\TestFolder\TestSubFolder" 
MD "C:\Windows\TestFolder\TestSubFolder" 
+0

'/ D'スイッチを' cd'に追加することを提案しましょう... – aschipfl

関連する問題