ここから本文です

マクロについて詳しい方教えてください。

アバター

ID非公開さん

2018/3/119:06:17

マクロについて詳しい方教えてください。

あるフォルダー内に入っている、PDFファイル・テキストファイル・ワードのファイル名の左端に【重要】という文字を記載したいのですが、教えていただけないでしょうか。

今は、F2押して、ファイル名の左端にをctrl+vを押して、【重要】を貼り付けています。

手でするのは限界があります・・・

よろしくお願いいたします。

閲覧数:
44
回答数:
2
お礼:
500枚

違反報告

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

Prometheusさん

2018/3/120:43:57

「VBScript」による回答ですので、「Windows限定」です。

このプログラムは、これから処理したいフォルダにプログラムファイルを放り込んで、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

フォルダ内の拡張子が、「pdf」、「txt」、「doc」、「docx」、「docm」のファイルの先頭に「【重要】」を付け加えます。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。

できたプログラムファイル(「~.vbs」ファイル)を、これから処理したいフォルダに放り込んでダブルクリックするだけです。

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

Option Explicit
Dim c, e, f, gf, i, m, n(), so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
c = - 1
For Each f In gf.Files
e = LCase(so.GetExtensionName(f.Name))
If (e = "doc" or e = "docx" or e = "docm" or e = "txt" or e = "pdf") and Left(f.Name, 2) <> "~$" Then
c = c + 1
ReDim Preserve n(c)
n(c) = f.Name
End If
Next
For i = 0 to c
Set m = so.GetFile(gf & "\" & n(i))
m.Name = "【重要】" & m.Name
Next
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

「厳密に」というような意味ですが、気にしないでください。

Set so = CreateObject("Scripting.FileSystemObject")

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

Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))

プログラムファイル(「~.vbs」ファイル)の存在するフォルダ、すなわち、これから処理したいフォルダを取得しています。

c = - 1

配列変数にいったん、格納するのに必要な変数の初期化。

For Each f In gf.Files

プログラムファイルの存在するフォルダ内のすべてのファイルを1つずつ処理。

e = LCase(so.GetExtensionName(f.Name))

拡張子を調べています。

If (e = "doc" or e = "docx" or e = "docm" or e = "txt" or e = "pdf") and Left(f.Name, 2) <> "~$" Then

拡張子が、「doc」、「docx」、「docm」、「txt」、「pdf」で、かつファイル名の頭2文字が「~$」以外の場合、
(頭2文字が「~$」のファイルは、表示されていませんが、存在する場合がありますので、処理対象から外しています。)

c = c + 1

1個カウント。

ReDim Preserve n(c)
n(c) = f.Name

配列変数にファイル名を格納しています。

なぜ、このようなことをしているかというと、いったん、「【重要】」と頭に付けると、また、そのファイルを処理対象ファイルとプログラムが勘違いし、「【重要】【重要】」となってしまうためです。

End If
Next

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

For i = 0 to c

今、配列変数に格納したファイルの数だけ処理。

Set m = so.GetFile(gf & "\" & n(i))

「i」番目のファイルをゲットしています。

m.Name = "【重要】" & m.Name

ファイル名の頭に「【重要】」を付け加えています。

Next

を、配列変数に格納したファイルだけ繰り返しています。

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

あとは、終了処理で、最後に「Finished!」と表示しています。

アバター

質問した人からのコメント

2018/3/2 16:59:00

lin_nyan36さん
ご回答ありがとうございました。

無事問題なく出来ました。
また、ご縁がありましたらよろしくお願いいたします。

ベストアンサー以外の回答

1〜1件/1件中

ii3********さん

2018/3/119:24:24

環境はWindowsですか?
そういう時はリネームソフトを使うのが一番だと思うのですが。
https://forest.watch.impress.co.jp/library/nav/genre/sys/file_filer...

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

  • 取り消す
  • キャンセル

この質問につけられたタグ

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

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

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

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

閉じる

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

不適切な投稿でないことを報告しました。

閉じる