bin
現在のパスからサブフォルダーをルートとするすべてのフォルダーを削除するには、次のスクリプトを使用します。これは私が試した方法です (バッチ スクリプトに関する私の知識の範囲内で)。
setlocal enabledelayedexpansion
for /f %%i in ('dir /a:d /s /b *')
do
(
set d=!i!\bin
if exist !d! rd !d!
)
endlocal
動作せず、構文エラーもあるようです。しかし、それが何なのか調べるのは面倒です。 からバッチファイルを実行するとcmd
、次のようなメッセージが表示されます。
/s was unexpected at this time.
そのバッチファイルを から実行するには、を にcmd
変更する必要があります。そうしないと、エラーが発生します。%%
%
The syntax of the command is incorrect.
バッチ ファイルを から実行したい場合、最初にすべてを にcmd
置き換える必要があるというのはおかしいことでしょうか? 本当に :D バッチ ファイルを直接実行すると (ダブルクリックして)、コンソール ウィンドウがすぐに閉じてしまい、何が問題なのか確認する機会がまったくありません。最後に を入れて一時停止できるようにしてみましたが、これも機能しません (その前に何らかのエラーがあり、一時停止も機能していないことはわかっています)。%%
%
PAUSE
元の問題に戻ってください。ここで何が間違っているのか見当もつかないので ( から報告されたメッセージでcmd
)、本当に困っています。皆さんが私のスクリプトの間違いを見つけて、修正を手伝ってくれることを願っています。
答え1
@echo off
cd/d "%~dp0"
for /f delims^= %%i in (
'dir /a:d/s/b ^| findstr /eil "\bin \obj"'
)do echo; rd "%%~i"
観測: 1その構文は他の言語に役立つ傾向がありますが、bat/cmd スクリプトには役立たず、このループはそのようには機能しません...
for /f %%i in ('loop command') do ( // dynamic variable %%i can be expanded, that // doesn't mean it will be treated/expanded // like a regular variable %i% at runtime !i! )
コマンドの構文が正しくありません。
- 観測: 2コードは画面にリストを表示します。フォルダーを実行/削除するには、
echo;
出力が正しい場合は削除してください。
追加リソース:
答え2
PowerShell は cmd よりもはるかに強力なので、使用してください。
インストールする必要がありますPowerShell 7、インストールすることもできますWindowsターミナルインストール方法や開き方が分からない場合は、私が説明するよりもわかりやすく説明しているオンライン チュートリアルがたくさんあるので、ここでは繰り返しません。
pwsh.exe
管理者権限で実行:
Win+ R-> 入力pwsh.exe
-> Ctrl+ Shift+Enter
次に、コンソールで、「Path\to\folder」内のすべての項目を取得します。
Get-ChildItem -Path "Path\to\folder" -Force -Recurse
サブディレクトリのみをリストします:
Get-ChildItem -Path "Path\to\folder" -Force -Recurse -Directory
最初のコマンドの出力をパターンに従ってフィルタリングします。
Get-ChildItem -Path "Path\to\folder" -Force -Recurse | Where-Object {$_.Name -match 'bin|obj' }
チェーン内の前のリンクによってフィルタリングされたすべてのアイテムを削除します。
Get-ChildItem -Path "Path\to\folder" -Force -Recurse | Where-Object {$_.Name -match 'bin|obj' } | Remove-Item -Recurse -Force -Confirm:$false
上記は必要な処理を行います。path\to\folder はプレースホルダーです。これを実際の (絶対) パスに変更します。たとえば、パスが "D:\MyFolder" の場合は、"D:\MyFolder" に変更します。'bin|obj' は正規表現です。他のパターンが必要な場合は、必要なパターンに置き換えます。パターンを作成するには、垂直パイプを使用してオプションを結合するだけです。パスとパターンを引用符で囲みます。
警告: 上記は、確認プロンプトなしで正しく指定されたすべての内容を自動的に削除します。準備ができていない場合は実行しないでください。
全体を短くすると次のようになります。
gci "Path\to\folder" -Fo -R | % {$_.Name -match 'bin|obj' } | ri -R -Fo -Con:$false
再利用性を高めるために、コードを関数内に囲みます。
function remove-filtered ($path, $pattern) {
Get-ChildItem -Path $path -Force -Recurse | Where-Object {$_.Name -match $pattern } | Remove-Item -Recurse -Force -Confirm:$false
}