特定フォルダ内のファイルとフォルダを削除する方法について
- 評価
- クリップ 0
- VIEW 1,050
とある特定フォルダ配下のフォルダ内の
ファイル、フォルダをすべて削除するような以下内容のBATファイルを作成しました。
特定の条件下ではこちらの想定通りに動いてくれますが、
フォルダ名に() ← 半角カッコ
等があったりするとそのフォルダだけ残ってしまいます。
@echo off
dir /b /ad D:\WORK\ > "D:\111\dir.txt"
for /f "tokens=1,2,3" %%a in (D:\111\dir.txt) do (
pushd D:\WORK\%%a %%b %%c
del /s /q *.*
dir /b /s /ad D:\WORK\%%a %%b %%c >> "D:\111\dir_2.txt"
)
for /f "delims=" %%d in (D:\111\dir_2.txt) do (
rmdir /s /q %%d
)
どの用に修正すればカッコ等が付いたフォルダも削除できるようになるか
ご教授ください。
*******************実装したい内容***************
・前提
D:\WROK配下にはTESTフォルダしかない。
D:\WORK\TEST配下に
①:1フォルダ
②:2 フォルダ
③:3.txt
④:4.zip
⑤:5(6)フォルダ
・実装内容
TESTフォルダを削除することなく上記の①~⑤を削除したい。
・問題点
上述したコマンドをBAT化し実行すると①~④は削除されるが⑤のみ残ってしまう。
宜しくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
実行前はどんなディレクトリ構成で、実行後にそれがどうなって欲しいのでしょうか?
とある特定フォルダ配下のフォルダ内のファイル、フォルダをすべて削除する
に文字通り答えると、
rd /s /q "フォルダ名"
と1コマンドですが。
追記
D:\WROK配下にはTESTフォルダしかない。
TESTフォルダを削除することなく上記の①~⑤を削除したい。
であれば、
rd /s /q D:\WORK\TEST
md D:\WORK\TEST
ですね。
追記2
TESTフォルダには共有設定がしてあるので削除&再作成は面倒
pushd D:\WORK\TEST
if errorlevel 1 exit /b
del *?
for /d %%A in (*) do rd /s /q "%%A"
popd
pushd が失敗したのにファイル削除すると予想外の物が消えて大変なので、念のためにそのチェックを入れてます。
ファイル削除でdel *
でなくdel *?
としているのは確認メッセージを出さないようにするため。
追記3
カレントディレクトリをそこにしておけば、消えないのを利用すれば、
pushd D:\WORK\TEST
if errorlevel 1 exit /b
rd /s /q . 2>NUL
popd
でいいか。これでTEST
は削除されません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
VBScriptと言うタグがありましたので、そっち方面で回答させて頂きます。
このような形にして頂ければ、削除出来たハズです。
cd %~dp0%
cscript ファイル名.vbs
Function delete_directory(ByVal directoryName)
Dim objFso: Set objFso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
If objFso.FolderExists(directoryName) = True Then
'Delete directory(including read-only and subdirectory)
call objFso.DeleteFolder(directoryName, True)
Else
WScript.Echo "Not exist, " + directoryName
End If
Set objFso = Nothing
End Function
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
PowerShell を使えば配下にファイルが入っているディレクトリを簡単に削除できます。
PowerShell.exe -ExecutionPolicy RemoteSigned -c "Remove-Item D:\WORK\TEST\* -Recurse -Force"
これを実行する前に、実行すると何が削除されるのかを次のコマンドであらかじめ確かめることができます。
PowerShell.exe -ExecutionPolicy RemoteSigned -c "Remove-Item D:\WORK\TEST\* -Recurse -Force -Whatif"
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
これで行けると思います。
cd d:\wrok
del /q test
md test
1.testごと削除
2.testを作成
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/04/23 19:06
そもそも、特定のフォルダ配下を1度dirした結果をテキストに出力のうえfor文を使用しその配下のフォルダ・ファイルすべてを削除することを実装したいです。
質問に記載したコマンドである程度実装できているのですが、フォルダ名にカッコが入っていたりするとそのフォルダだけ残ってしまうため、ご質問させて頂いた次第になります。
2020/04/23 19:32
\WORK\test\%%a %%b %%c
が意味不明だし、ディレクトリを削除する処理が無いし。
2020/04/23 23:34
お手数ですが、ご確認頂ければと思います。
2020/04/27 09:29
度々の補足で申し訳ないのですが、こちらのフォルダはファイルサーバのフォルダに対して実施するコマンドを想定していましたので元あるフォルダを削除することができないです。
フォルダを削除することなく実装することは可能でしょうか?
2020/04/27 09:54
2020/04/28 17:21
pushdの所はテキスト(dirした結果)から代入することはできるのでしょうか?
2020/04/28 21:33
何をしたいのでしょうか?
2020/05/19 18:37
質問にも記載しました通り、dirした結果を順にフォルダの中身を消していくようなものを作成したいと思っております。
2020/05/19 18:59
どういう結果を得たいのかと言う事なのですが。
2020/05/19 19:20
とあるフォルダ配下のファイル・フォルダを削除する際に自動でやる(ファイルサーバなので手動で全選択し削除すると相当な時間がかかることが想定される)ことを目的にしています。
回答になっていますでしょうか?
2020/05/19 20:03
これを客観的・具体的に。
2020/05/19 21:49
という記述でしょうか。
2020/05/19 21:56