出産前後の痔にはご注意!

デスクトップ上にあるファイル、フォルダの内、
指定したファイル、フォルダ以外を削除する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」を一括削除したい。

このQ&Aに関連する最新のQ&A

hoge」に関するQ&A: hoge ってなんですか?

A 回答 (4件)

以下のようなバッチファイルで可能です。


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

デスクトップに残すファイル・フォルダの指定をバッチの下から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
    • good
    • 4
この回答へのお礼

非常にわかりやすかったです。ありがとうございます。

お礼日時:2009/04/01 21:42

ANo.#1の補足 Part 2。



ANo.#1では、ファイル名の指定を間違えた場合、削除したくないファイルが削除されてしまいますので、
@echo off
echo.

の後に、

if not "%~1"=="" if not exist %1 (echo ファイル名の指定が間違っています:%1) && goto :eof
if not "%~2"=="" if not exist %2 (echo ファイル名の指定が間違っています:%2) && goto :eof
if not "%~3"=="" if not exist %3 (echo ファイル名の指定が間違っています:%3) && goto :eof
if not "%~4"=="" if not exist %4 (echo ファイル名の指定が間違っています:%4) && goto :eof
if not "%~5"=="" if not exist %5 (echo ファイル名の指定が間違っています:%5) && goto :eof
if not "%~6"=="" if not exist %6 (echo ファイル名の指定が間違っています:%6) && goto :eof
if not "%~7"=="" if not exist %7 (echo ファイル名の指定が間違っています:%7) && goto :eof
if not "%~8"=="" if not exist %8 (echo ファイル名の指定が間違っています:%8) && goto :eof
if not "%~9"=="" if not exist %9 (echo ファイル名の指定が間違っています:%9) && goto :eof

を入れて、ファイルの実在を確認するようにした方が良いかもしれません。
    • good
    • 0

ANo.#1の補足。



ここのサイトは、投稿の各行頭のスペースやタブコードを自動的に削除するようになっていて、インデントが分かりにくくなるために、ANo.#1のバッチファイルの各行頭は、タブコードを全角スペース2つに置き換えていますので、コピー&ペーストする場合には、全角スペースを削除するか、半角スペースまたはタブコードに置き換えてください。
    • good
    • 0

指定したファイルを除外するというのは、少々面倒なので、ちょっと、下にびろ~~んと長くなりますが・・・。



注意:
 バッチファイルのパラメータの指定の制限上、除外するファイル名やフォルダ名の指定は9つまでです。

解説:
 半角スペースを含むファイル名やフォルダ名を指定する場合には、ファイル名やフォルダ名を二重引用符(")で括る必要があり、パラメータ 「%1」、「%2」、・・・、「%9」には二重引用符がついた状態のファイル名やフォルダ名が入っていますが、「for %%f in (*.*)」で「%%f」に入るファイル名やフォルダ名には二重引用符がつかず、if文を「if /i "%%f"=="%1"」のように「%1」、「%2」、・・・、「%9」で指定すると、二重引用符が2つ重なってうまく比較できなくなってしまうので、「%~1」、「%~2」、・・・、「%~9」で二重引用符を取り除いたものを二重引用符で括っています。

@echo off
echo.
rem ファイルの削除
for %%f in (*.*) do (
  if /i "%%f"=="%~1" (
    echo %%f not delete.
  ) else (
    if /i "%%f"=="%~2" (
      echo %%f not delete.
    ) else (
      if /i "%%f"=="%~3" (
        echo %%f not delete.
      ) else (
        if /i "%%f"=="%~4" (
          echo %%f not delete.
        ) else (
          if /i "%%f"=="%~5" (
            echo %%f not delete.
          ) else (
            if /i "%%f"=="%~6" (
              echo %%f not delete.
            ) else (
              if /i "%%f"=="%~7" (
                echo %%f not delete.
              ) else (
                if /i "%%f"=="%~8" (
                  echo %%f not delete.
                ) else (
                  if /i "%%f"=="%~9" (
                    echo %%f not delete.
                  ) else (
                    erase "%%f"
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
rem フォルダの削除
for /d %%d in (*.*) do (
  if /i "%%d"=="%~1" (
    echo %%d not delete.
  ) else (
    if /i "%%d"=="%~2" (
      echo %%d not delete.
    ) else (
      if /i "%%d"=="%~3" (
        echo %%d not delete.
      ) else (
        if /i "%%d"=="%~4" (
          echo %%d not delete.
        ) else (
          if /i "%%d"=="%~5" (
            echo %%d not delete.
          ) else (
            if /i "%%d"=="%~6" (
              echo %%d not delete.
            ) else (
              if /i "%%d"=="%~7" (
                echo %%d not delete.
              ) else (
                if /i "%%d"=="%~8" (
                  echo %%d not delete.
                ) else (
                  if /i "%%d"=="%~9" (
                    echo %%d not delete.
                  ) else (
                    rmdir /s /q "%%d"
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
    • good
    • 0
この回答へのお礼

ありがとうございます。参考にさせていただきます。

お礼日時:2009/04/01 21:43

このQ&Aに関連する人気のQ&A

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

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

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

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

QBatch: フォルダ内の特定のファイル以外を全て削除

こんにちは。

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

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

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

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

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

Aベストアンサー

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

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 /? 等を見てください。

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

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 としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

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

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

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

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

Aベストアンサー

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

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

区別するなら、

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

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 /? で見つけられます。

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

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
でいいはず。

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で特定のファイルのみをコピーする方法

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バッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には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ランキング