Windows batについて教えてください。 下記構造のフォルダ内からサブディレクトリ内も含めて拡張子が.logのファイルを削除するコマンドですが、うまくいきません。 (拡張子がついていないものはフォルダで、対象外フォルダ内部は削除しません。) 原因として、削除対象のフォルダ名には空白が含まれています。 コマンド内でディレクトリを指定する際にショートパスで指定しようとしましたが、 dir /xで対象のフォルダを検索したところショートパスが無かったです。(こちらで指定できるものなのでしょうか?) 空白を含むパスは””で囲むことで、一つの文字列として認識されると思っています。 echo "%targetFolder2%" には"C:\temp\ho ge\対象外\"が格納されてるので””で問題ないと思うのですが、 結果は"C:\temp\ho []とlogに吐き出され、logも削除されません。 空白が悪さしていると思っていますが、どのような修正で改善できるでしょうか? (echo %%Aやdel %%Aの%%Aを””で囲っても状況は変わりませんでした。) C:\temp\ho ge |-○○.log |-sub-△△.log |-sub2-sub3-☆☆.log |-対象外-□□.log @echo off rem 日時の取得 set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set time2=%time: =0% set hh=%time2:~0,2% set mn=%time2:~3,2% set ss=%time2:~6,2% rem 削除のフォルダ選定用 set targetFolder=C:\temp\ho ge set targetFolder2=%targetFolder%\対象外 if not "%targetFolder2:~-1%"=="\" set targetFolder2="%targetFolder2%"\ rem log掃き出し用 set logFolder=C:\temp\log set filename=%yyyy%-%mm%%dd%-%hh%%mn%%ss% set logFile=%logFolder%\%filename%.log rem log作成 copy nul %logFile% echo 開始:%date% %time%>> %logFile% rem 対象削除コマンド FOR /F %%A IN ('forfiles /P "%targetFolder%" /S /D -91 /M "*.log" /c "cmd /c echo @path"') DO ( if not "%%~dpA"=="%targetFolder2%" ( echo %%A [%%~tA]>> %logFile% del %%A ) ) echo 終了:%date% %time%>> %logFile%
Windows 全般