Windowsで以下のようなデータ削除用バッチを作成したのですが
一部のファイルが削除できず、困っています。
解決方法について、どなたかご教示いただけないでしょうか。
<概要>
処理の内容:
ファイル名に"_"を含むtxtファイルがあり、
ファイル名には果物名が含まれている。
特定の果物名が含まれるtxtファイルを一括削除したい。
具体的には、
①「in.csv」を""で区切り、削除対象の果物名を読み込む。
②削除対象ファイルが存在するフォルダのdirを取得する。
③dir結果を1行ずつ""で区切って果物名を抽出する。
④「in.csv」とdir結果の果物名が一致する場合、
絶対パス指定でファイルを削除する。
削除対象のファイル名(イメージ):
D:~~~~~\A_BBB_CCC_DDD_EEE_F.txt
・果物名は"BBB"部分。
・"BBB"、"CCC"には"_"が含まれることがある。
・各ファイルは別々のフォルダに格納されている。
<困っていること>
・"BBB"、"CCC"にあたる箇所に"_"が含まれる場合、
dir結果、in.csvから果物名を抽出できない。
(処理抜粋)
==========================
set IN_CSV=in.csv
set IN_CSV_PATH=C:~~~~~
REM in.csvから果物名を抽出
pushd %IN_CSV_PATH%
for /F "tokens=2 delims=_" %%n in (in.csv) do (
REM dummyline
)
REM work用カレント(C:\work)を変数に保持
for /F "usebackq" %%i in (cd
) do (
set WORK="%%i"
)
pushd D:~~~~~
set FLAG=0
REM in.csvから果物名を抽出、ループ処理
REM dirで取得したファイル名に該当の果物名が含まれていれば削除
set FLAG2=0
REM 抽出
for /F "usebackq tokens=2 delims=" %%n in (type %WORK%\%IN_CSV%
) do (
REM 発見したファイルごとに削除
for /F "usebackq tokens=1-10 delims=" %%a in (dir /s /b
) do (
if %%~xf == .txt (
if %%n == %%b (
set FLAG2=1
del %%a_%%b_%%c_%%d_%%e_%%f
)
)
)
REM dirを1ループして一致しない場合はエラー
if !FLAG2! == 0 (
echo [!date! !time!] 「%%n」の該当ファイルは存在しませんでした
)
set FLAG2=0
)
==========================
(in.csv)
A_りんご
A_みかん
A_いちご
A_ばなな
A_キ_ウイ
A_キ_ウ_イ
※どこかで"_"の数を数えたり、変数(%%a~)の数を数えたり
といった処理を入れれば解決できそうなのですが…
以上、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/03 10:47
2018/04/03 11:48 編集
2018/04/03 12:28