質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

1039閲覧

batを用いて 名前一致した際にショートカット.lnkをフォルダに移動させたい

poipoi5819

総合スコア9

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/04/16 02:09

初めて投稿致します。
下記のような動作をするbatを作成したいと思っており、どうのように記述したらいいのかご教示頂けますでしょうか。

ショートカットリンク(.lnk)名と、フォルダ一覧テキストファイル(linklist.txt)内に記載のフォルダ名が一致した際に、フォルダにファイルを移動させるbat。

1:今、\server1\temp\ に、エクセルのショートカットリンクが保存されています。保存されているショートカットリンクは複数の場合もあります。  
\server1\temp
result-加藤-1.lnk result-山田-2.lnk result-高橋-1.lnk・・・・

2:一方、\server2\list\ listフォルダ以下、全ディレクトリが記載された linklist.txtが \server3\temp\ に保存されています。
linklist.txtの中身(例)はディレクトリが1行ずつ記載されています。記載行数は2000行ほどになります。

\server3\temp\linklist.txtの記載内容

 \server2\list\temp
\server2\list\temp\result
\server2\list\temp\result\result-加藤
\server2\list\temp\result\result-山田
\server2\list\temp\result\result-西村
\server2\list\temp\result\result-高橋
\server2\list\temp\result\result-加藤\result-加藤-2
\server2\list\temp\result\result-加藤\result-加藤-3
\server2\list\temp\result\result-加藤\result-加藤-6
\server2\list\temp\result\result-山田\result-山田-1
\server2\list\temp\result\result-山田\result-山田-2
\server2\list\temp\result\result-山田\result-山田-4
\server2\list\temp\result\result-西村\result-西村-1
\server2\list\temp\result\result-西村\result-西村-2
\server2\list\temp\result\result-西村\result-西村-3
\server2\list\temp\result\result-西村\result-西村-100
\server2\list\temp\result\result-高橋\result-高橋-1
\server2\list\temp\result\result-高橋\result-高橋-4
\server2\list\temp\result\result-高橋\result-高橋-10


linklist.txtの最右端のフォルダ名と \server1\temp\に保存のショートカットリンク名が一致した場合、ショートカットリンクをフォルダに移動したい。フォルダ名がダブる事はありません。

上記1、2の場合は、result-山田-2.lnkとresult-高橋-1.lnkがlinklist.txtのフォルダ名と一致しますので、
result-山田-2.lnk を \server2\list\temp\result\result-山田\result-山田-2
result-高橋-1.lnk を \server2\list\temp\result\result-高橋\result-高橋-1
に移動します。

移動させるロジックとしては下記ようになるのかなと思っています。
・\server1\temp\のショートカットリンク名をtxtファイルに書き出す(リンク名.txt)
・書き出したリンク名.txtを1行ずつ、linklist.txtの内容と照合する
・照合した結果、存在すれば移動、存在しなければ次のリンク名の検索に移る
照合結果のフラグを立てることも必要と思っています。
SK(SHOGOKEKKA)=1(存在) SK=0(存在しない)

移動のタイミングは、タスクで5分に1回、batを起動させ、実行しようと考えています。

何卒お願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/04/16 02:16

bat よりも PowerShell や vbs の方がやりやすいと思います。また作ったショートカットを移動させるより目的のフォルダに直線作った方が単純になると思います。またフォルダにリンクを集めるよりいい方法があるかもしれません。
poipoi5819

2018/04/16 02:30

Zuishin様 早速のご回答ありがとうございます。フォルダに直接、とのご指摘をいただきましたが、.lnkの方が先に作成されるため直接フォルダへの作成ができません。また自身の勉強不足ですが、PowerShell や vbsは現状において知識が無いので、何とかbatで書けないものかご相談した次第です。
Zuishin

2018/04/16 02:54

今の質問では何もかも全部聞いています。せっかくの bat の知識が生かされていません。テキストファイルからデータを取り出してループさせる方法も、それをファイル名と比較する方法も、ディレクトリ内のファイルを列挙する方法も、コピーする方法もサブルーチンの作り方も何も知らないように見えます。わかる部品を作ってサブルーチン化して追記すれば問題点が伝わるのでは?
unz.hori

2018/04/16 05:35

何か聞きたい事を絞って質問しないと丸投げと思われますよ。
poipoi5819

2018/04/19 07:14

Zuishin様 ご回答ありがとうございます。仰せのとおりですね。batのみにこだわりはなかったので、自身でできる範囲のエクセルVBAで何とか構築を試みます。ありがとうございました。
poipoi5819

2018/04/19 07:17

unz.hori様 ご回答ありがとうございます。 >何か聞きたい事を絞って質問しないと丸投げと思われますよ。  仰せのとおりですね。申し訳ございませんでした。よく考えてから質問したいと思います。ありがとうございました。
guest

回答2

0

比較的簡単な部類かと思います。
\server3\temp\linklist.txtを読み込んで、
・末尾のフォルダ名に対応する.lnkファイルが\server1\temp\に存在する場合は、
・その.lnkファイルを読み込んだフォルダに移動する

DOS

1for /f %%A in (\server3\temp\linklist.txt) do if exist \server1\temp\%%~nA.lnk move \server1\temp\%%~nA.lnk %%A

1行ですね。

投稿2018/04/24 15:23

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poipoi5819

2018/06/13 11:24

otn さん お礼が大変遅くなり、申し訳ございませんでした。ご教示頂いたとおりで行いたい事が実現できました。 初めての投稿で使い方もなかなか慣れず、私としてのBAはotnさんでしたが、iruyasさんをクリックしてしまいました。もちろん、他の方のご回答も参考にしながら、逆に知識を広げていこうという想いになったので、ありがたかったです。 お礼が遅くなり申し訳ございませんでしたが、引き続き宜しくお願い申し上げます。
guest

0

ベストアンサー

BATでそんな高度なことをする人はほとんどいないですね。
VBS等の利用をご検討ください。

どうしてもということなら、「バッチファイル基礎文法リファレンス」を検索してみてください。

投稿2018/04/16 13:52

編集2018/04/17 01:53
iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poipoi5819

2018/04/19 07:12

iruyasさん ご回答ありがとうございます。 >BATでそんな高度なことをする人はほとんどいないですね。  そうなんですね。考え方を変えてみます。エクセルVBAならば自身で構築できる範囲ですので、何とか実現してみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問