ここから本文です

お世話になります。ファイルのコピーと連番付与を楽にできる方法はありませんでし...

bur********さん

2018/3/2013:01:33

お世話になります。ファイルのコピーと連番付与を楽にできる方法はありませんでしょうか?

1つのファイルから連番のついたコピーを作りたいです。

元ファイル 001.jpg

001.jpg
001.

jpg_2
001.jpg_3
001.jpg_4
001.jpg_5

というように元ファイルから4つコピーを作成して連番を付けたいです。

ファイルの数は全部で100ぐらいありまして、元ファイル名はアルファベットと数字の組み合わせで規則性はありません。

フリーソフトでもバッチ処理でも方法は何でも構いませんが、手作業よりも早く正確にできたら助かります。

皆様のお知恵をお貸しください。
よろしくお願いします。

閲覧数:
91
回答数:
3

違反報告

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

プロフィール画像

カテゴリマスター

lin********さん

2018/3/2018:54:57

「VBScript」による回答ですので、「Windows限定」です(「バッチ」という言葉が出てきますから、大丈夫だと思いますが・・・)。

このプログラムは、「jpg」ファイルを1つだけ、プログラムファイルにドラッグ&ドロップするだけです。

「001.jpg」をドラッグ&ドロップした場合、ドラッグ&ドロップしたファイルと同じフォルダ内に、

001_001.jpg
001_002.jpg
001_003.jpg


という名前のコピーを作成します。

質問では、「.jpg_1」となっていますが、「.jpg」は、「拡張子」といって、「Windows」にとって大変重要な意味があるので、変更してはいけません。

今回は、3個だけ、作っていますが、数については、プログラムの「For i = 1 to 3」の「3」の数を、必要な分だけ増やしてください。

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

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

できたプログラムファイル(「~.vbs」ファイル)に、「~.jpg」ファイルを、1つだけドラッグ&ドロップしてください。

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

Option Explicit
Dim f, m, n, i, so, wa
Set so = CreateObject("Scripting.FileSystemObject")
Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "jpg" Then
MsgBox("ドラッグ&ドロップできるのは、jpgファイル1つだけです")
WScript.Quit
End If
f = so.GetParentFolderName(wa(0))
n = so.GetBaseName(wa(0))
For i = 1 to 3
m = Right("00" & i, 3)
so.CopyFile wa(0), f & "\" & n & "_" & m & ".jpg", True
Next
Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

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

Set so = CreateObject("Scripting.FileSystemObject")

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

Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "jpg" Then
MsgBox("ドラッグ&ドロップできるのは、jpgファイル1つだけです")
WScript.Quit
End If

ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、その数や拡張子を調べ、想定外なら、メッセージを表示して、プログラムそのものを終了してしまいます。

f = so.GetParentFolderName(wa(0))

ドラッグ&ドロップされたファイルが存在するフォルダを調べています。

n = so.GetBaseName(wa(0))

ドラッグ&ドロップされたファイルのベースネーム(「abc.jpg」→「abc」)を調べています。

For i = 1 to 3

3回繰り返します。

m = Right("00" & i, 3)

「001」、「002」、「003」という文字列が、「m」に入ります。

so.CopyFile wa(0), f & "\" & n & "_" & m & ".jpg", True

ドラッグ&ドロップされたファイル(「wa(0)」)を、同じフォルダ内に「_001」を付け足して、コピーしています。

Next

を、3回繰り返しています。

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

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

  • lin********さん

    2018/3/2021:09:11

    申し訳ございません。

    勘違いしていました。

    今度のプログラムは、プログラムファイルの存在するフォルダ内のすべての「jpg」ファイルが処理対象で、同じフォルダ内に「abc.jpg」なら、

    abc_1.jpg
    abc_2.jpg
    abc_3.jpg
    abc_4.jpg

    の4個のファイルのコピーを作成します。

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

    ★★★つづく★★★

  • その他の返信(1件)を表示

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

  • 取り消す
  • キャンセル

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

2018/3/24 00:18:01

回答いただいた皆様ありがとうございました。大変参考になりました。

一番はじめの回答者の方をベストアンサーに選ばせて頂きました。

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

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

uso********さん

2018/3/2108:27:21

どのフォルダから どのフォルダへのコピーなどの
具体的仕様が不明瞭だが、基本的にはPowerShell
とかで簡単に出来る類いの話かと。

ls *.jpg | %{foreach($z in 1..4){
  cp $_.Name ($_.BaseName+'_'+$z+$_.Extension)
} }

otu********さん

2018/3/2023:41:13

番号ごとに別ホルダーに入れてみました。
指定ホルダーにホルダーを4っ作ります。

Sub 新規フォルダーを4っ作りファイルコピー()
Dim folName1 As String, folName2 As String
Dim i, j, folders(1 To 4) As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
folName1 = .SelectedItems(1)
End With
’フォルダーを4っ作成
For j = 1 To 4
For i = 1 To 1000
folName2 = folName1 & "\新規" & i
If Dir(folName2, vbDirectory) = "" Then Exit For
Next
MkDir folName2
folders(j) = folName2
Next j
’各ファイルを連番毎のホルダーにコピー
Dim FSO As Object, f As Object, c, newPath
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each f In FSO.GetFolder(folName1).Files
c = Split(f.Name, ".")
If UBound(c) = 1 Then
For j = 1 To 4
newPath = folders(j) & "\" & c(0) & "_" & j & "." & c(1)
f.Copy newPath
Next j
End If
Next f
Set FSO = Nothing
End Sub

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

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

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

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

閉じる

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

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

閉じる