ここから本文です

お知恵をお貸し下さい。 ショートカットのリンク先を名前からIPアドレスに変更す...

tokyouwalkerさん

2017/11/1510:45:09

お知恵をお貸し下さい。
ショートカットのリンク先を名前からIPアドレスに変更する事が
batかVBSで出来ますか。

【やりたい事】
①file.lnk→192.168.1.50.lnkに変更したい
②file.lnkは複数存在する(階層がある)
ex)file\画像\201105.lnk
file\作成\201206.lnk
などもfileをIPアドレスに置き換えたい
③出来ればローカル端末すべてのショートカットを置き換えたいが
無理であればデスクトップだけでもいい

教えて頂ければ助かります。

閲覧数:
31
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin_nyan36さん

2017/11/1514:33:30

以下の「VBScript」は、プログラムファイル(「~.vbs」ファイル)が存在するフォルダを含めて、以下のフォルダをどこまでも「~.lnk」を探し、見つけると、そのファイル名を「192.168.1.50.lnk」に換えているだけです。

したがって、「ドライブ」単位には、実行できます。

「デスクトップ」内で実行すれば、「デスクトップ」フォルダ以下のすべてのフォルダを調べます。

ただ、「192.168.1.50.lnk」という固定の名前でいいのでしょうか?(ちょっと不安です。同じフォルダ内に複数の「~.lnk」が存在してはいけませんので・・・(「~.lnk」ファイルの中身を調べるのかな?))

ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

処理終了後、「Finished!」と表示しますので、「OK」を押して終了してください。

Option Explicit
Public f, gf, n, so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(".")
Call z
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

Sub z
For Each n In gf.Files
If LCase(so.GetExtensionName(n.Name)) = "lnk" Then
n.Name = "192.168.1.50.lnk"
End If
Next
For Each f In gf.SubFolders
Set gf = Nothing
Set gf = so.GetFolder(f)
Call z
Next
End Sub

簡単な説明です。

Option Explicit

「厳密に」とか「明確に」というような意味で、このオプションを設定すると、変数は、その使用の前に、必ず「Dim」等によって、「使いますよ!」と宣言しておかなければなりません。

Public f, gf, n, so

通常は、「Dim」で変数の宣言を行いますが、今回は、サブプロシージャと共通で使いたいので、「Public」で宣言しています。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set gf = so.GetFolder(".")

プログラムファイルの存在するフォルダを取得しています。

Call z

「z」サブプロシージャを呼び出しています。

Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

終了処理で、最後に「Finished!」と表示しています(「Set ~」で使った変数は、「Nothing」で解放しておきます)。

Sub z

「z」プロシージャの始まり。

For Each n In gf.Files

「gf」フォルダ内のすべてのファイルを処理。

If LCase(so.GetExtensionName(n.Name)) = "lnk" Then

もし拡張子が「lnk」なら、

n.Name = "192.168.1.50.lnk"

その名前を「192.168.1.50.lnk」にしています。

End If
Next

を、すべてのファイルで繰り返しています。

For Each f In gf.SubFolders

「gf」フォルダ以下のすべてのサブフォルダを処理。

Set gf = Nothing
Set gf = so.GetFolder(f)

見つかったサブフォルダを再び「gf」セットしています。

Call z

自分自身(「z」サブプロシージャ)を呼び出しています。

このような手法を「再帰的」と言います。

Next

を、すべてのサブフォルダで繰り返しています。

  • 質問者

    tokyouwalkerさん

    2017/11/1517:11:50

    回答とご説明ありがとうございます。
    1点教えてください。
    "lnk"を全て192.168.1.50.lnkに変更したいのではなく
    "file¥*¥.lnk"とか"file\1\2\.lnk"とかのfileを192.168.1.50に置き換えたいのですがその際は
    If LCase(so.GetExtensionName(n.Name)) = "lnk" Then
    をどう書き換えれば出来ますでしょうか。
    無知な為申し訳ございませんが教えて頂ければと思います。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。