[前の記事]« 謎めいたFIND命令
[次の記事]2つのテキストファイルの内容を行単位で結合したい »

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

▲カテゴリー「EXIST」索引へ
▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「文字列の操作」索引へ

同名の全てのテキストファイルを検出して1行追記したい

890.
同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月15日(木) 18時03分
ナチ◆ykAJNRw=
●DOS/Windowsのバージョン↓
Windows2000
(以下ご自由に質問文をお書きください)

はじめまして。初めてバッチファイルを作成しておりこのサイトに辿り着きました。

現在複数人のユーザで1台のパソコンを利用しており、
それぞれのユーザには下記のパスに「notes.ini」というテキストファイルが存在します。

C:\Documents and Settings\●●●(ユーザ名)\Local Settings\Application Data\Lotus\Notes\Data\notes.ini

全てのユーザのnotes.iniに「IM_NO_SETUP=1」というパラメータを追記したいのです。


試しに、notes.iniというファイル名を探し、探し出したファイルに
「IM_NO_SETUP=1」と追記するイメージで下記を記述しました。

for /f "delims=" %%F in ('findstr /m "notes"*.ini') do @echo IM_NO_SETUP=1 >> %%F

しかしながら、動作しませんでした。

何か文法に間違いはありますでしょうか?
また、他に良い方法がある場合、別のやり方でも構いません。

どなたかご教授いただけるとありがたいです。
よろしくお願いします。
891.
Re:同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月16日(金) 11時56分
YanaKen◆c0rnJ1Q=
ナチさん

>for /f "delims=" %%F in ('findstr /m "notes"*.ini') do @echo IM_NO_SETUP=1 >> %%F

> 'findstr /m "notes"*.ini'
 の部分は、
  (現行ディレクトリ上の)拡張子.iniファイル(ファイル名は不定)の中から"notes"という文字列が存在するファイルを探し出す。
 という処理になっていますね。

>notes.iniというファイル名を探し、探し出したファイルに
>「IM_NO_SETUP=1」と追記する
 ……という「本来の意図/目的」のご説明とは矛盾しているように見えますが、「本来の意図/目的」が上記の通りだとすれば、下記の処理で十分そうに思われます。

if exist (パス名\)notes.ini @echo IM_NO_SETUP=1>>(パス名\)notes.ini

YanaKen
893.
Re:同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月16日(金) 18時00分
ナチ◆ykAJNRw=
YanaKenさん、ご返答ありがとうございます!

>>for /f "delims=" %%F in ('findstr /m "notes"*.ini') do @echo IM_NO_SETUP=1 >> %%F
>
>> 'findstr /m "notes"*.ini'
> の部分は、
>  (現行ディレクトリ上の)拡張子.iniファイル(ファイル名は不定)の中から"notes"という文字列が存在するファイルを探し出す。
> という処理になっていますね。

ディレクトリ関係なく「Notes.ini」ファイルを検索できるものだと思って作成していました。(^^;



> ……という「本来の意図/目的」のご説明とは矛盾しているように見えますが

言葉が足りなくてイメージが伝わりにくかったようですいません。

パス名を指定したかったのですが、1台のPCに複数のユーザが存在し、Documents and Settings下のフォルダのユーザ名がついたフォルダ名を取得する方法が分からなかった為、ディレクトリに関係なく「Notes.ini」ファイルを検索できないかと思い、作成した結果が上記になります。

複数台のPCにバッチを当てたい為、
「C:\Documents and Settings\●●●(ユーザ名)\Local Settings\Application Data\Lotus\Notes\Data\notes.ini」
の「●●●(ユーザ名)」に当たる部分は固定にできません。

現在ログインしているユーザには下記を記述して対処しています。
echo IM_NO_SETUP=1 >> "%UserProfile%\Local Settings\Application Data\Lotus\Notes\Data\notes.ini"

しかし他にユーザ2、ユーザ3など存在する時に、「●●●(ユーザ名)」に当たる名前を取得し、パスを指定する方法が分かりません。

このようなことは実現できるでしょうか?

お手数おかけし申し訳ございません。よろしくお願いします。
894.
Re:同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月17日(土) 02時06分
cstlog
>> ……という「本来の意図/目的」のご説明とは矛盾しているように見えますが
>
>言葉が足りなくてイメージが伝わりにくかったようですいません。
>
>パス名を指定したかったのですが、1台のPCに複数のユーザが存在し、Documents and Settings下のフォルダのユーザ名がついたフォルダ名を取得する方法が分からなかった為、ディレクトリに関係なく「Notes.ini」ファイルを検索できないかと思い、作成した結果が上記になります。
>
>複数台のPCにバッチを当てたい為、
>「C:\Documents and Settings\●●●(ユーザ名)\Local Settings\Application Data\Lotus\Notes\Data\notes.ini」
>の「●●●(ユーザ名)」に当たる部分は固定にできません。
>
>現在ログインしているユーザには下記を記述して対処しています。
>echo IM_NO_SETUP=1 >> "%UserProfile%\Local Settings\Application Data\Lotus\Notes\Data\notes.ini"
>
>しかし他にユーザ2、ユーザ3など存在する時に、「●●●(ユーザ名)」に当たる名前を取得し、パスを指定する方法が分かりません。
>
>このようなことは実現できるでしょうか?
>
>お手数おかけし申し訳ございません。よろしくお願いします。

基本的にプロファイルのパスはC:\Documents and Settings配下
に存在するので、以下の処理はいかがでしょうか?

for /f "tokens=1 delims=" %%a in ('dir /b "C:\Documents and Settings"') do (echo IM_NO_SETUP=1 >> "C:\Documents and Settings\%%a\Local Settings\Application Data\Lotus\Notes\Data\notes.ini")
895.
Re:同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月19日(月) 03時05分
YanaKen◆c0rnJ1Q=
ナチさん

>Documents and Settings下のフォルダのユーザ名がついたフォルダ名を取得する方法

 NT系のfor コマンドには、見つかったディレクトリ名を順次変数に入れてくれる /D スイッチというのがあります。これを使った場合はこんな感じになるかと思います。

for /D %%F in ("C:\Documents and Settings\*.*") do (
if exist "%%F\Local Settings\Application Data\Lotus\Notes\Data\notes.ini" (
echo IM_NO_SETUP=1 >>"%%F\Local Settings\Application Data\Lotus\Notes\Data\notes.ini"
)
)
※Documents and Settings配下に「notes.iniが含まれないディレクトリ」もありうることを考慮すればif existが必要になりますが、そういった処理が不要なら、下記のような感じで単純化できると思います。

for /D %%F in ("C:\Documents and Settings\*.*") do (
echo IM_NO_SETUP=1 >>"%%F\Local Settings\Application Data\Lotus\Notes\Data\notes.ini"
)

 または、for /R (再帰)を使えば、次のように書いても実用上ほぼ同様な結果が得られると思います。

 for /R "C:\Documents and Settings" %%F in (notes.ini) do if exist "%%F" echo IM_NO_SETUP=1 >>"%%F"

 ただ、こっちだと C:\Documents and Settings 配下の全ディレクトリ・ツリーに対して再帰的にnotes.iniを探すことになるので、「処理に時間がかかる」「目当てのディレクトリ以外にnotes.iniというファイルがあった場合も処理されてしまう」など、いくつか考慮事項が出てきます。

YanaKen
898.
Re:同じファイル名の全てのテキストファイルにパラメータを追記したい
2005年12月19日(月) 14時56分
ナチ◆ykAJNRw=
YanaKenさん、cstlogさん

土日にPC見れなかったもので返信遅くなりましてすいません。

お二人のやり方を早速試してみたところ、
両方とも見事私の希望通りに動いてくれました!!

いろんなやり方があるんですね。
本当に勉強になります。

Documents and Settings以下にnotes.iniが含まれないものもあった為、
if existも付けました。

おかげさまで無事バッチファイル作成が完成しました。

お忙しいところどうもありがとうございました♪

ナチ
 
 


カテゴリー「EXIST」索引へ
カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「文字列の操作」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2005年12月15日 14:56に投稿されたエントリーのページです。

ひとつ前の投稿は「謎めいたFIND命令」です。

次の投稿は「2つのテキストファイルの内容を行単位で結合したい」です。

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

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