ショボ短歌会

特定のファイルを除き、英数11桁の画像ファイルを消したいと思っています。
その特定のファイルも英数11桁なのでややこしいことになっています。
作りかけですが、以下のようにしています。

echo off

SET target_path=c:\test

pushd %target_path%
for %%f in ( * ) do call :sub "%%f"
popd

exit /b

:sub
set flag=OFF
for %%e in ( nowprinting.gif nowprinting.jpg ) do if %1=="%%e" set flag=ON
if "%flag%"=="ON" goto :EOF
del %1
goto :EOF

ディレクトリの中には、削除対象外の英数11桁ではないファイルもあるため、
チェックが必要です。
正規表現など足してみたのですがうまくいきません。
ご教授いただけないでしょうか。

A 回答 (4件)

■案1



削除対象外のファイルの属性を変更する。
例えば、読み取り専用にしたり、隠しファイルにする。
その上で、属性を指定して一括削除。

ATTRIB +R nowprinting.*

DEL /A:-R *

■案2

一時ファイルで削除対象ファイルを管理。
FINDSTR で対象ファイルを抽出してから削除する。

DIR /B > %TEMP%\target0.tmp

FINDSTR /R /I /X
/C:"^[0-9a-z][0-9a-z][0-9a-z][0-9a-z]
[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]
[0-9a-z][0-9a-z]\..*"
%TEMP%\target0.tmp > %TEMP%\target1.tmp

FINDSTR /R /V
/C:"^nowprinting\."
%TEMP%\target1.tmp > %TEMP%\target2.tmp

FOR /F %%f IN ('type %TEMP%\target2.tmp') DO DEL %%f
    • good
    • 0

・この作業をする頻度は?


・BATでないとだめな理由は?

例えば、数回しかやらないのなら、あれこれ考えている間に手動で削除した方が早いです。
例えば、VBScriptを使えばもっと簡単にできるのではないでしょうか。

この回答への補足

質問に対して欲しいのは「回答」であって、質問じゃないんですけど。
「Aでなんとかしたい」と質問しているのに「Bなら楽だ」とか
頓珍漢な回答しかできないなら、黙っていてください。

補足日時:2011/10/15 13:58
    • good
    • 0

こういうのはどうでしょう?


if %1:~0,11% == %1:~0,-4% DEL %1
「先頭から11文字」と「後ろの4文字以外」が一致するかどうか判定します。
つまり「拡張子を除くファイル名が11文字」に等しいわけです。

ちなみに上記の記法についてはSETのヘルプに記載されています。
    • good
    • 0

1、何がどう「うまくいかない」のかを書く


2、「その特定のファイル」は「nowprinting」でいいのか
3、「英数11文字のファイルの削除」はできているのか
こういうことはちゃんと記載してもらわないと。


とりあえず特定の文字列を含むファイルを省くには最初のFORにFオプションをつけてfindを使えば早いと思います。
for %%f in ( * ) do call :sub "%%f"

FOR /F "delims=" %%F IN ('dir /b ^| find "nowprinting"') do ~

この回答への補足

nowprinting.jpgとnowprinting.gifを除いたファイルを削除できている状態です。
11桁のチェックは入っていないので、ファイル名が11桁以外でも削除してしまうので、そのチェックを入れたいのですが。

補足日時:2011/10/07 14:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!