あなたのコード内の主な問題は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
)を使用してフォルダに変更しようとしましたが、変更できる場合は、元のアクティブディレクトリに戻ります。
からだから、あなたは、彼らが存在する場合にのみ、フォルダの内容を削除したいです。存在しない場合、どのようにコンテンツを削除しますか?言い換えれば、内容が存在するかどうかをチェックせずに内容を削除するだけです... – aschipfl