[前の記事]« 名前に空白を含むサービス名のチェック
[次の記事]2ファイルを1行ずつ交互に読み込むには »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ
▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「REG,SCANREG…レジストリとコマンド・プロンプト」索引へ

特定のアプリの保存先を検索してファイルを削除したい

1682.
保存先を特定できないファイルを削除したい
2007年02月28日(水) 01時25分
ごる
どうもわからないことがありますので教えていただきたいと思います。
WinXP Proを使用しています。

あるアプリケーションが吐き出すログファイルをバッチで削除したいと考えていますが、
使用者によってアプリケーションのインストール先(ドライブやフォルダ)が異なる為、
いろいろな環境に対応できる記述が思い浮かびません。

ただし、アプリケーションのフォルダ構成は「\aaa\bbb\log.lzh」となることは確定
していますのでインストール先までバッチを持ってきて実行すれば簡単なのですが、
任意の場所から実行したいのです。

この様なインストール先がわからない状況でファイル削除のバッチ作成は可能でしょうか?

何卒ご教授よろしくお願いします。
1683.
Re:保存先を特定できないファイルを削除したい
2007年02月28日(水) 17時56分
otn
>ただし、アプリケーションのフォルダ構成は「\aaa\bbb\log.lzh」となることは確定
>していますのでインストール先までバッチを持ってきて実行すれば簡単なのですが、
>任意の場所から実行したいのです。

インストール場所がレジストリに記録されるなら、reg コマンドで調べるという手があります。
後は、
(for %%D in (C D E ... X Y Z) do dir /b %%D:\ 2>NUL | findstr /e "\aaa\bbb\log.lzh" ) >where.txt

で、where.txt に場所が書かれます。
1684.
Re:保存先を特定できないファイルを削除したい
2007年03月02日(金) 00時01分
ごる
>>ただし、アプリケーションのフォルダ構成は「\aaa\bbb\log.lzh」となることは確定
>>していますのでインストール先までバッチを持ってきて実行すれば簡単なのですが、
>>任意の場所から実行したいのです。
>
>インストール場所がレジストリに記録されるなら、reg コマンドで調べるという手があります。
>後は、
>(for %%D in (C D E ... X Y Z) do dir /b %%D:\ 2>NUL | findstr /e "\aaa\bbb\log.lzh" ) >where.txt
>
>で、where.txt に場所が書かれます。

otnさん、どうもありがとうございます。
ご指摘のとおり、レジストリのPathに記録されておりますので
そちらをあたってみようと思い、まずreg queryのみを実行した結果がこちらです。
reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\ABCD
    Path        REG_SZ  D:\apps\aaa\

次にこれの結果の「D:\apps\aaa\」だけを抜き出し、ファイル削除を試みました。

for /f "tokens=1,2*" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh

do以降(?)の記述が間違っているためか、結果としては
del !\log.lzh
del HKEY_LOCAL_MACHINE\SOFTWARE\ABCD\log.lzh
del Path\log.lzh
というようにいずれも指定されたパス・ファイルが見つかりませんと出ます。

うまく「D:\apps\aaa\」を当てはめるにはどうすればよいでしょうか。

何卒よろしくお願いします。
1686.
Re:保存先を特定できないファイルを削除したい
2007年03月03日(土) 00時58分
ごる
>>>ただし、アプリケーションのフォルダ構成は「\aaa\bbb\log.lzh」となることは確定
>>>していますのでインストール先までバッチを持ってきて実行すれば簡単なのですが、
>>>任意の場所から実行したいのです。
>>
>>インストール場所がレジストリに記録されるなら、reg コマンドで調べるという手があります。
>>後は、
>>(for %%D in (C D E ... X Y Z) do dir /b %%D:\ 2>NUL | findstr /e "\aaa\bbb\log.lzh" ) >where.txt
>>
>>で、where.txt に場所が書かれます。
>
>otnさん、どうもありがとうございます。
>ご指摘のとおり、レジストリのPathに記録されておりますので
>そちらをあたってみようと思い、まずreg queryのみを実行した結果がこちらです。
>reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path
>
>! REG.EXE VERSION 3.0
>
>HKEY_LOCAL_MACHINE\SOFTWARE\ABCD
>    Path        REG_SZ  D:\apps\aaa\
>
>次にこれの結果の「D:\apps\aaa\」だけを抜き出し、ファイル削除を試みました。
>
>for /f "tokens=1,2*" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh
>
>do以降(?)の記述が間違っているためか、結果としては
>del !\log.lzh
>del HKEY_LOCAL_MACHINE\SOFTWARE\ABCD\log.lzh
>del Path\log.lzh
>というようにいずれも指定されたパス・ファイルが見つかりませんと出ます。
>
>うまく「D:\apps\aaa\」を当てはめるにはどうすればよいでしょうか。
>
>何卒よろしくお願いします。


その後、記述を見直して for /f "tokens=1,2*"をfor /f "tokens=3"と
変更したことでとりあえずはうまく行ったようです。
ただ、下の様に出る1行目の結果をなくすことができればベストですが・・。
------------------------------------
del VERSION\log.lzh
指定されたファイルが見つかりません
del D:\apps\aaa\log.lzh
------------------------------------

もしご存知でしたらご教授ください。
1688.
Re:保存先を特定できないファイルを削除したい
2007年03月03日(土) 06時48分
YanaKen◆c0rnJ1Q=
ごるさん、こんにちは。

 reg queryの実行結果は、(とりあえずここでの前提として)下記の5行あるわけですね。
[1]
[2]! REG.EXE VERSION 3.0
[3]
[4]HKEY_LOCAL_MACHINE\SOFTWARE\ABCD
[5]    Path        REG_SZ  D:\apps\aaa\

 このうち2行めには「!」「REG.EXE」「VERSION」「3.0」の4つの「トークン」が含まれます。
 なので、そのかたちのままだとfor文はこの行の3つめのトークン="VERSION"も変数%%Aに送り込んでくるため、「del VERSION\log.lzh」という無意味な(アブナい?)コマンドが実行されてしまっているわけです。

>del VERSION\log.lzh
>指定されたファイルが見つかりません
>del D:\apps\aaa\log.lzh

 必要なのはREGコマンドが返した内容中の5行めだけですから、先頭から4行読み飛ばす指定"skip=4"を指定すればこの問題は解消できます。(2行以上読み飛ばせばいいのでskip=2やskip=3でもいいですが)

for /f "skip=4 tokens=3" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh

 または、2行めが"!"で始まっていることに着目すれば、その行がコメント行だとfor文に教えてやればよいことになるので、
for /f "tokens=3 eol=!" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh
 ……という書き方もできます。

YanaKen

1693.
Re:保存先を特定できないファイルを削除したい
2007年03月05日(月) 18時18分
ごる
>ごるさん、こんにちは。
>
> reg queryの実行結果は、(とりあえずここでの前提として)下記の5行あるわけですね。
>[1]
>[2]! REG.EXE VERSION 3.0
>[3]
>[4]HKEY_LOCAL_MACHINE\SOFTWARE\ABCD
>[5]    Path        REG_SZ  D:\apps\aaa\
>
> このうち2行めには「!」「REG.EXE」「VERSION」「3.0」の4つの「トークン」が含まれます。
> なので、そのかたちのままだとfor文はこの行の3つめのトークン="VERSION"も変数%%Aに送り込んでくるため、「del VERSION\log.lzh」という無意味な(アブナい?)コマンドが実行されてしまっているわけです。
>
>>del VERSION\log.lzh
>>指定されたファイルが見つかりません
>>del D:\apps\aaa\log.lzh
>
> 必要なのはREGコマンドが返した内容中の5行めだけですから、先頭から4行読み飛ばす指定"skip=4"を指定すればこの問題は解消できます。(2行以上読み飛ばせばいいのでskip=2やskip=3でもいいですが)
>
>for /f "skip=4 tokens=3" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh
>
> または、2行めが"!"で始まっていることに着目すれば、その行がコメント行だとfor文に教えてやればよいことになるので、
>for /f "tokens=3 eol=!" %%A in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\ABCD /v Path') do del %%A\bbb\log.lzh
> ……という書き方もできます。
>
>YanaKen
>

YanaKenさん
ご回答いただきありがとうございました。
ご教授頂いたskipを使用することで、無事不要な行を除くことが出来ました。

これで完璧・・と思った矢先、「C:\Program Files\..」のような
パスにスペースが含まれる場合には対応できないことに気づきました。
こうなるとtokenでの対応は難しいのでしょうか。

宜しくお願いします。
1695.
Re:保存先を特定できないファイルを削除したい
2007年03月05日(月) 22時07分
otn
>これで完璧・・と思った矢先、「C:\Program Files\..」のような
>パスにスペースが含まれる場合には対応できないことに気づきました。
>こうなるとtokenでの対応は難しいのでしょうか。
>
>宜しくお願いします。

for /f "tokens=2*" %%A in ('REG ...') do if %%A==REG_SZ del "%%B\bbb\log.lzh"

tokens=2* にすると、第二が%%Aに入り、第三以降が空白含めそのままの形で%%Bに入ります。
先頭行スキップしてもいいのですが、このようにREG_SZのある行だけ処理対象にする方法もあります。
1697.
Re:保存先を特定できないファイルを削除したい
2007年03月05日(月) 23時41分
ごる
>>これで完璧・・と思った矢先、「C:\Program Files\..」のような
>>パスにスペースが含まれる場合には対応できないことに気づきました。
>>こうなるとtokenでの対応は難しいのでしょうか。
>>
>>宜しくお願いします。
>
>for /f "tokens=2*" %%A in ('REG ...') do if %%A==REG_SZ del "%%B\bbb\log.lzh"
>
>tokens=2* にすると、第二が%%Aに入り、第三以降が空白含めそのままの形で%%Bに入ります。
>先頭行スキップしてもいいのですが、このようにREG_SZのある行だけ処理対象にする方法もあります。

otnさんどうもありがとうございます。
どうやらこの方法で落ち着くことができたようです。
試しに処理を走らせて見ましたが、きちんとパスを認識できました。

今回はotnさん、YanaKenさんからわかりやすい解説をいただいたおかげで
いまいち意味を理解せずに使用していたtokensやskipについて
少しではありますがつかめた様な気がします。

otnさん、YanaKenさん本当にありがとうございました。
 
 


カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ
カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「REG,SCANREG…レジストリとコマンド・プロンプト」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2007年02月28日 13:09に投稿されたエントリーのページです。

ひとつ前の投稿は「名前に空白を含むサービス名のチェック」です。

次の投稿は「2ファイルを1行ずつ交互に読み込むには」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
 
このブログについて | 運営:有限会社メディアポート