[前の記事]« DOSコマンド・プロンプト相談室【4代目】です。
[次の記事]OS名の取得について »

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

▲カテゴリー「バッチファイルの起動、引数の取得」索引へ

[WIN98]引数から一部の文字列を抽出したい

3.
引数からの任意の文字列取得
2004年10月25日(月) 23時22分
九八
●DOS/Windowsのバージョン↓
Windows98です

Win98で、バッチファイルに与えた引数から任意の文字列を取り出す方法はありませんでしょうか?


具体的には、下記のWinXP用に作成したバッチファイルをWin98用に移植したいと考えています。

#test.bat \\hostname\share_folder_name

---------------[test.bat]
@echo off
echo %1>temp.txt
FOR /f "tokens=1 delims=\" %%i in ( temp.txt ) DO (
 ping %%i | find "Reply from"
 if errorlevel 1 goto end
)

共有フォルダへの操作・・・

:end
exit
--------------

共有フォルダへの操作を行う前に、相手のPCが起動しているかどうかをPingで確認をさせたいのです。
このとき、引数に与えた「\\hostname\share_folder_name」から「hostname」だけを取り出したいのですが、Win98の場合にはどのようにしたら良いのかが分かりません。

何か良い方法がありましたら、教えてください。

また、上記のバッチファイルの方法も、引数を一度テキストに吐き出してから読み込むという手順なので、あまりスマートではないと思っています。ここも、もう少しスマートな良い方法がありましたら合わせて教えていただけないでしょうか?

よろしくお願いいたします。
6.
Re:引数からの任意の文字列取得
2004年10月26日(火) 12時36分
YanaKen
九八さん こんにちは。

>Win98の場合にはどのようにしたら良いのかが分かりません。

・DOS/Win95系では、単語の抽出など、文字列単位での加工手段は(ごく限定的な条件では、裏ワザ的に可能なケースもあるかもしれないですが)標準コマンドの範囲では存在しない。
・NT系ではforコマンドやsetコマンドを通じてそのあたりが拡張された。

 ……と、そういう関係になりますので、悩んでも無駄というか、ない袖は振れないというか、「Win98ではこれといった手段は(標準では)存在しない」ことを前提にお考えになったほうがよいと思います。

 具体的には、何かしらプログラム開発言語(WSHでも可能かもしれません)を使って簡単な加工用プログラムを自作するか、もしくは(企業用途の場合、許されていないケースも多いようですが)DOS用として流通しているオンラインソフトから文字列加工全般向きのもの(DOS用のsedなどがよく知られています)を探して入手・活用するか……のいずれかになるのでは。

YanaKen
9.
Re:引数からの任意の文字列取得
2004年10月26日(火) 17時27分
otn
ooです。そのうちにと思ってましたが、掲示板が新しくなったのを機会にハンドルをotnに変えます。「無限大」と読み違えた人もいるし、ハンドル種類を減らそうかと。

>共有フォルダへの操作を行う前に、相手のPCが起動しているかどうかをPingで確認をさせたいのです。
>このとき、引数に与えた「\\hostname\share_folder_name」から「hostname」だけを取り出したいのですが、Win98の場合にはどのようにしたら良いのかが分かりません。

>何か良い方法がありましたら、教えてください。

YanaKenさんもお書きのように、Win9x系の場合は悩むだけ無駄な気がします。
MS純正のツールがいいならWSHをインストールしてVBScriptを使うのが良いでしょう。純正でなくて良いならフリーツールがVector等にたくさんあります。1つでいろいろ出来るという意味でBU (BU111.LZH)がお薦め。配布方法に問題があるなら、com2txt (com2t150.tgz or com2t150.lzh)を使って、バッチスクリプトの中にBU.COMを埋め込む事も出来るでしょう。

他には、ホスト名と共有名を別々に引数に与えると言うのも状況によって可能ならば簡単な解決ですね。%1がホスト名、%2が共有名。

>また、上記のバッチファイルの方法も、引数を一度テキストに吐き出してから読み込むという手順なので、あまりスマートではないと思っています。
>ここも、もう少しスマートな良い方法がありましたら合わせて教えていただけないでしょうか?

FOR /f "delims=\" %%i in ("%1") DO (
で出来ます。" "で過去むとそのまま文字列として扱われます。for/?参照。また、tokens=1はデフォルトなので書かなくても同じ。
13.
Re2:引数からの任意の文字列取得
2004年10月27日(水) 00時28分
九八
YanaKenさん、otnさん、コメントありがとうございます。


>DOS/Win95系では、単語の抽出など、文字列単位での加工手段は標準コマンドの範囲では存在しない

>YanaKenさんもお書きのように、Win9x系の場合は悩むだけ無駄な気がします。

そうですか、、、
それではいくら探しても見つからないはずですね・・・
残念ですが、(標準コマンドでの解決は)諦めたいと思います。

-------------
echo %1>temp.txt
FOR /f "tokens=1 delims=\" %%i in ( temp.txt ) DO (
-------------
この部分を担当してくれる WSH スクリプトを作成する方向で考えてみたいと思います。


>他には、ホスト名と共有名を別々に引数に与えると言うのも状況によって可能ならば簡単な解決ですね。%1がホスト名、%2が共有名。

今回の場合は、既にあるバッチの一部に「Pingで確認する」という機能を追加するために、引数を変更することは難しいです。(最初の作り込みが甘く、引数を変えてしまうと、バッチファイル全体に影響してしまうので・・・)

>FOR /f "delims=\" %%i in ("%1") DO (
>で出来ます。" "で過去むとそのまま文字列として扱われます。for/?参照。また、tokens=1はデフォルトなので書かなくても同じ。

ありがとうございます。
確認できました!

今後ともよろしくお願いいたします。
 
 


カテゴリー「バッチファイルの起動、引数の取得」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2004年10月25日 15:21に投稿されたエントリーのページです。

ひとつ前の投稿は「DOSコマンド・プロンプト相談室【4代目】です。」です。

次の投稿は「OS名の取得について」です。

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

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