【先着1,000名様!】1,000円分をプレゼント!

こんにちは。

件名通りなのですが、フォルダ内のファイルや
サブフォルダを特別な数個のファイルを残して全て削除したいのです。

残すファイルの拡張子は *.mdb です。
例を挙げると以下のような状態で、mdbファイル以外
全てのファイル、Bフォルダも全部消したいのです。

A--- 1.mdb   2.mdb aaa.txt  bbb.doc  ccc.html
|----B(フォルダ) ddd.pdf  eee.xls

拡張子を指定すれば、と思ったのですが、どんな拡張子の
ファイルが放り込まれているのかわかりません。
またフォルダもどんな名前のフォルダが作成されているか
予測できません。

全部消す & *.mdb を除く のような構文があればいいのですが
可能かどうか、可能であれば、教えていただけないでしょうか?
よろしくお願いします。

A 回答 (2件)

バッチファイルを作って実行します。



cd \A
for /r %%F in (*) do if /i "%%~xF" neq ".mdb" del "%%F"
for /r /d %%D in (*) do rd "%%D"

はじめのfor文でファイルを全部リストアップして拡張子が .mdb 以外のものを削除します。
次のfor文でディレクトリを全部リストアップして rd で削除します。.mdb ファイルが残っており空ディレクトリでなければ削除されません。エラーメッセージがでますけど気にしなければいいです。メッセージがいやなら、
for /r /d %%D in (*) do rd "%%D" 2>NUL
にすればいいです。

詳しくは、for /? や if /? 等を見てください。
    • good
    • 5
この回答へのお礼

ありがとうございました。
教えていただいた構文を利用して無事に
バッチを作成して処理することができました!

お礼日時:2006/01/20 23:20

質問の内容から想像するに、Windowsの話ですよね。



手っ取り早い方法としては、リソースキットに含まれる"forfiles"という
バッチ支援ツールを使うのが良いかと思います。

リソースキットをお持ちでなければ、類似品がダウンロードできます。

参考URL:http://www.dynawell.com/reskit/microsoft/win2000 …
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q指定以外のファイルやフォルダを削除したい。

デスクトップ上にあるファイル、フォルダの内、
指定したファイル、フォルダ以外を削除するBATファイル、
もしくはVBSを作成したいのですが、
どのような記述をすれば良いのでしょうか?
OSはWindows2000 server SP4です。

どなたかご教示よろしくお願いいたします。

例:
デスクトップに以下の2つのファイルと1つのフォルダがあり、
これ以上デスクトップにファイルやフォルダを増やしたくないのですが、

「hoge2.txt」
「hoge.lnk」
「hoge」

誤って以下のファイルとフォルダを作成してしまいました。

「hoge1.txt」
「hoge.jpg」
「hoge2」


「hoge2.txt」と「hoge.lnk」「hoge」は常にデスクトップに残し、
「hoge1.txt」と「hoge.jpg」「hoge2」を一括削除したい。

Aベストアンサー

以下のようなバッチファイルで可能です。
デスクトップのファイルのうち、指定したファイル名(フォルダ名)に一致するもの以外をすべて削除します。バッチでの削除ですのでゴミ箱には残りませんのでご注意ください。

デスクトップに残すファイル・フォルダの指定をバッチの下から5行目の( )内に記述します。
当方このバッチのテスト中にデスクトップのファイルをかなり消してしまいました:-)
記述ミスにはくれぐれもご注意を。


:---------------------------------------------------- sample.bat
echo off
pushd %userprofile%\デスクトップ
for %%f in ( * ) do call :sub "%%f"
for /D %%f in ( * ) do call :sub "%%f" d
popd
exit /b

:sub
set flag=OFF
for %%e in ( hoge2.txt hoge.lnk hoge ) do if %1=="%%e" set flag=ON
if "%flag%"=="ON" goto :EOF
if "%2"=="" del %1
if "%2"=="d" rd /S /Q %1
goto :EOF

以下のようなバッチファイルで可能です。
デスクトップのファイルのうち、指定したファイル名(フォルダ名)に一致するもの以外をすべて削除します。バッチでの削除ですのでゴミ箱には残りませんのでご注意ください。

デスクトップに残すファイル・フォルダの指定をバッチの下から5行目の( )内に記述します。
当方このバッチのテスト中にデスクトップのファイルをかなり消してしまいました:-)
記述ミスにはくれぐれもご注意を。


:---------------------------------------------------- sample.bat
ec...続きを読む

Qバッチファイルで特定ファイル以外を削除

お願いします。

あるディレクトリ内に
program.bat があります。

このディレクトリにある、自分自身(program.bat)と特定の拡張子(たとえば .hoge と .foo) 以外すべてを削除するにはどのように書けばいいでしょうか?

Aベストアンサー

僕なら、残すファイルを別ディレクトリに移して、該当ディレクトリのファイルを全て消し、別ディレクトリに退避したファイルを元のディレクトリに戻します。
mkdir ..\backup
move program.bat ..\backup
move *.hoge ..\backup
move *.foo ..\backup
del *
move ..\backup\*
rmdir ..\back

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

Qバッチファイルで指定拡張子以外のファイルをコピーする方法

OK Waveページ内を検索してみましたが、同じような質問をされている方がいないようでしたので、新規で質問させていただこうと思います。

ある特定のフォルダに入っているファイルを、指定した拡張子以外のファイルのみコピーしるバッチファイルを作成したいのですが、よい方法がみつかりません。
コマンドの操作方法をいろいろ調べてはみたのですが、
指定拡張子以外をコピーするようなコマンドがないようです。

例えば、c:\TEST_Aに、a.xls, b.doc, c.txtとファイルがあって、拡張子が"txt"以外のファイルをすべてc:\TEST_Bフォルダにコピーを取りたい場合、どのようにバッチファイルを組めばよいでしょうか。

以上、宜しく御願い致します。

Aベストアンサー

SET SRC_DIR=C:\TEST_A
SET DIST_DIR=C:\TEST_B
SET EXCLUDE_FILE_EXT=.txt

FOR %%F IN (%SRC_DIR%\*) DO (
IF /I NOT "%%~xF"=="%EXCLUDE_FILE_EXT%" copy "%%F" "%DIST_DIR%"
)

みたいな感じでしょうか・・・

※ファイルの拡張子の取得方法は for /? で見つけられます。

Qxcopyで特定のファイルのみをコピーする方法

xcopyもしくはcopyコマンドを使用し、ディレクトリ内の特定のファイル(複数)を
コピーするにはどのようにしたら良いのでしょうか?

特定のファイルの数が多すぎるため、一行ずつコマンドを書くのは手間が掛るため、
何か良い方法があれば教えて頂きたいと思います。

excludeオプションを使用すれば特定のファイルを除外できるようですが、
反対の意味の特定のファイルのみをコピーしたいです。

例)
c:\test内は以下のファイルがあります。
・aaa.txt
・bbb.txt
・ccc.txt
・ddd.txt
・eee.txt

これらのファイルの内、bbb.txtとddd.txtとeee.txtをコピーしたいです。

Aベストアンサー

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt c:\distdir

尚、この場合は拡張子がいずれも txt なので、以下のように書くと文字数を若干減らせます。
1コマンドラインの文字数は限りがあるので、ファイル数が多くて他の部分を縮めたい時に有用です。
for %a in ( bbb ddd eee ) do xcopy c:\test\%a.txt c:\distdir

ところで、文法を正確に記憶してなくて恐縮ですが、
Windows 配下のコマンドプロンプトが備えるコマンドでは、
予め対象のファイル名リストをテキストファイルで作っておき、
そこからファイル名を1個ずつ拾ってコマンド実行させる事が可能です。

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt ...続きを読む

Qバッチファイルを利用したフォルダの一括削除

バッチファイルを利用して特定のフォルダ内にあるすべての
ファイル&フォルダを削除したいと思っています。

Dドライブ直下のファイルを削除するときは
del "D:\*.*"
これですべてのファイルは削除できるかと思います。

Dドライブ直下にフォルダがあった場合どのように削除したらよいのでしょうか?
rmdirコマンドでは、フォルダごとに指定してやる必要がありますよね?
ワイルドカードを使用してフォルダを削除する方法などあるのでしょうか?

特定フォルダそのものを削除してしまって、作り直したほうが早いかとも
思いましたが、アクセス権設定を再度しなければならなくなるので
何か良い方法はないでしょうか?

ご存知の方いらっしゃいましたら、よろしくお願いいたします。

Aベストアンサー

こんにちは。
せっかくのバッチなので1つのコマンドでやろうと思わないで、
二段階に分ける方法はいかがでしょう。

1.配下のファイルを削除する
2.配下のサブフォルダを削除する。


pushd D:\test
del *.*
for /D %%f in ( * ) do rmdir /s "%%f"


確認せずにやるなら /q オプションで。

pushd D:\test
del /q *.*
for /D %%f in ( * ) do rmdir /s /q "%%f"

QXCOPYで指定したフォルダとファイルをコピーしたい

C:\AAAフォルダとC:\AAA以下のファイルをコピーしたくて、
XCOPY C:\AAA D:\BBB /E
とすると、コピー先のD:\BBBにはAAAフォルダにあるファイルはコピーされるのですが、AAAフォルダそのものはコピーされません。
XCOPY C:\ D:\BBB /E
とすればコピーできるのですが、そうするとC:\のほかのフォルダもコピーされてしまいます。
EXCLUDEオプションを使うには指定するファイルが多いため、あまり使いたくありません。(コピーする前にMDでコピー先にAAAフォルダを作成するのもなるべく避けたい)
知っている方がいらしたら教えて下さい。

Aベストアンサー

xcopy /e C:\AAA D:\BBB\AAA
複数ファイルのコピーでコピー先が存在しないとき、ファイル名と見なすかディレクトリ名と見なすか聞いてきます。

応答を聞かれるのが嫌なら
echo d | xcopy /e C:\AAA D:\BBB\AAA
でいいはず。

QDOSコマンドで指定日数よりも過去のフォルダを削除

サーバ上のログファイルを日毎に次のようなフォルダにまとめて管理しています。
(ログフォルダは翌朝のDOSバッチジョブでBACKUP_(処理日付)のフォルダを作成してその下に*.*指定で全てのファイル(除 フォルダ)を移動して作成します。)

例.
BACKUP_20041130
BACKUP_20041129
BACKUP_20041128
   ・
   ・
   ・
BACKUP_20040311
BACKUP_20040310

このフォルダを処理日付から数えて90日より古いものを削除するDOSコマンドバッチファイル(日次実行)を作成したいです。

プログラムを作成すればこれを実現するのは可能なんですが、なんとかDOSコマンドだけでこの仕組を作りこめないものでしょうか?

ご存知の方がいらっしゃったら教えて下さい。

Aベストアンサー

毎日必ずフォルダが作られているなら最新の90個を除いたものを消せばいいので、
for /f "skip=90" %%A in ('dir /b /ad /o-n BACKUP_????????') do rd /s /q %%A

ちゃんと日付けの計算をするなら、バッチコマンドだけでも不可能ではないですが長くなるので、日付け計算だけVBScriptを使うのが良いと思います。
echo WScript.Echo DateAdd("d",-90,Date) > tmp.vbs
for /f "delims=/ tokens=1-3" %%A in ('cscript //nologo tmp.vbs') do set OLD=BACKUP_%%A%%B%%C
del tmp.vbs
for /d %%D in (BACKUP_????????) do if %%D LSS %OLD% rd /s /q %%D

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング