人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

定期的に特定のフォルダ内のファイル名を変更する手段は有るでしょうか?
OSはWindows XPです。
Cドライブ直下に「jpg」フォルダがあります。
そのフォルダには日付と時間を参照した200601200121.jpg等のランダムに
名前が付けられたファイルが午前1時に定期的に40ファイル程度保存されます。
保存されるファイルの数はその時々で変わります。

1.このファイルを午前5時に連番のファイル名01.jpg、....40.jpgに変更したい
のですが実現する方法を教えて下さい。

2.この様な仕様をお知らせしアプリケーションを安価に作成してくれるSOHOの
方が集まるサイトがありましたら教えて下さい。

●質問者: k-aki
●カテゴリ:コンピュータ
✍キーワード:.jpg jpg OS SOHO Windows XP
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● tyousann
●1ポイント

http://www.officetanaka.net/other/filevisor/index.htm

Office TANAKA - FileVisorの部屋

■ 複数ファイルの名前を、連番ファイル名に一括リネームする


ファイル名に規則性がないバラバラのファイル群を、指定した連番ファイル名に一括リネームします。つまり、こういうことです。


aaa.jpg 図01.jpg

bbb.jpg → 図02.jpg

ccc.jpg 図03.jpg


こういうソフトはあります。

いかがでしょう。

◎質問者からの返答

定期的な時間での変更を希望していますがこちらで出来るのでしょうか?手動ではなく決まった時間に自動で変更したいのです。


2 ● utagawh
●1ポイント

http://www/

urlはダミー


決まった時間に処理を実行するのであればコントロールパネルの「タスク」で登録すればいいかと。

◎質問者からの返答

何をどのように「タスク」に登録すれば質問している方法を実現出来るか詳しく教えて頂けませんか?


3 ● dungeon-master
●35ポイント

http://www.vector.co.jp/soft/win95/util/se179649.html

x_rename ファイル名変更/移動/コピー(Windows95/98/Me / ユーティリティ)

ご質問の1についてのみお答えします。

x_renameというツールがあります。

ツールを起動しっぱなしになりますが、定時起動の機能があります。

連番は、/?という記法により既存のファイルの番号から継続してつけられます。


ご質問にあるファイル名変更は以下のように実現できると思います。

詳しくは、Helpをご覧ください。


1 ツール→スケジュール実行を押す

2 スケジュール実行Windowが開いたら、追加ボタンを押す。

3 条件設定Windowが開きます。

(1) ファイル名欄にx_rename.exeがパスと共に指定されていることを確認し、

ファイル数のラジオボタンをOnにします。※この条件設定は適当です。

(2) 一番下の繰り返し回数を任意に設定して「次へ」を押します。

4 実行設定Windowが開きます。

(1) 変換元フォルダを指定します。

(2) 変換元ファイルに*.jpgを指定します。(ランダムとの事なので)

(3) ソートを適当に指定します。

(4) 名前変換の<名前の付け方>に、規則を指定します。

01.jpg?40.jpgなら /??/E で良いと思います。

(5) 実行方法で移動をOnにして、出力先を指定します。

(上で指定した変換元ファイルは変換後のファイル名も該当してしまうので

変換後のファイルは別フォルダに作成する必要があるかと思います。)

(6) 連番設定の開始値に1を指定。

(7) 登録ボタンを押します。

5 操作はスケジュール実行Windowに戻ります。

(1) 実行時刻指定のラジオボタンをOnにして、05:00:00を指定します。

(2) 最後に「実行」ボタンを押します。


スケジュール実行Windowを終了すると設定はきえてしまいますが、実行設定

のところで、ファイル→ファイル保存…で、設定保存ができます。

過去に保存した設定で作業したい場合、条件設定Windowで読み込んでください。

実行時刻などは入れ直しです。


なお、変換元フォルダや出力先の指定を間違えると大変なことになります。

くれぐれも注意してください。

できるだけ、バックアップなどを行ってから試してください。

◎質問者からの返答

まだ良く見ていませんがなんとかなりそうです。ありがとうございます。


4 ● harg
●35ポイント

http://rubyforge.org/frs/?group_id=167

RubyForge: One-Click Ruby Installer: Project Filelist

ファイル処理であれば、rubyというスクリプト言語を用いて、処理を自動化できます。

URLから、ruby182-15.exeというファイルをダウンロードして、実行環境をインストールすることができます。インストールは、特に詳しいことがわからなければ、ruby182-15.exeを起動してnext連打で問題ありません。


rubyをインストールし終わったら、次の内容をメモ帳などで、処理したいファイルのあるディレクトリ(今回はC:¥ですね)にrename.rbなど名前をつけて保存します。


▼この行の下から


require ’find’


def isfile(path, ext)

reg = Regexp.compile(’^¥.¥/([¥w]+)¥.’+ext+’$’)

if (reg =~ path) != nil then

return true

else

return false

end

end


prefix = $*[0]

ext = $*[1]


if (prefix == nil || ext == nil) then

puts ”--使い方--”

puts ”ruby rename.rb [prefix] [ext]”

puts ”[prefix] -- 接頭辞 [ext] -- 拡張子”

puts ”このスクリプトがあるフォルダ内の、拡張子が[ext]であるファイルが対象となります。”

puts ”ファイルは[prefix] + 数字 + . + [ext]という名前にリネームされます。”

puts ”リネーム後の名前のファイルがすでに存在する場合、実行は中止されます。”

puts ”リネーム前のファイル名には、半角英数字のみ使用できます。”

puts ”リネーム後のファイル名には、全角文字も使うことができます。”

exit

end


files = Array.new

renamedfiles = Array.new


Find.find(’./’) {|file|

if isfile(file, ext) then

files.push file

end

}


len = files.length.to_s.length

i = 0

files.each{||

renamedfiles[i] = ’./’ + prefix+(”0” * (len - i.to_s.length))+i.to_s+’.’+ext

if FileTest.exist?(renamedfiles[i]) then

puts renamedfiles[i] + ”というファイルがすでに存在します。”

puts ”プログラムを終了します。”

exit

end

i+=1

}


i = 0

files.each{|file|

if File.rename(file, renamedfiles[i]) != 0 then

puts file + ” -> ” + renamedfiles[i] + ”:失敗!”

end

i += 1

}


▲この行の上まで


プログラムを実行するには、スタート -> ファイル名を指定して実行で

ruby -C C:¥ C:¥rename.rb test jpg

とすれば、拡張子jpgのファイルがtest00.jpg, test01.jpg, ...というようにリネームされます。

testやjpgの部分を変更すれば、他の種類のファイルにも使えます。

タスクで実行するには、ウィザードが使えないので、タスクを開いて

ファイル->新規->タスクで作成して、プロパティから実行するファイル名に

ruby -C C:¥ C:¥rename.rb test jpg

と入力して、あとは実行する時刻等を設定してください。


このプログラムはあくまでもサンプルとして作ったので、しっかりと検証をしていません。よって、このプログラムの使用によって万一損害が生じても、責任は取れませんのであしからず。

◎質問者からの返答

プログラムまで書いて頂きありがとうございます。

このような方法もあるんですね。非常に勉強になります。

もう少し回答を待ってみます。


5 ●
●0ポイント

http://panasonico.com/tmp/simple_renamer.zip

簡単なコマンドラインツールをVisual Basic 2005 Express Edition使って作ってみました。

.NET Framework 2.0が必要になります。

(VB 2005 Express Editionは無料で公開されてますので、使ってみてはいかがでしょう。)


URLのファイルをDL後、展開してsetup.exeをダブルクリックすると

C:¥Documents and Settings¥ユーザー名¥My Documents¥Visual Studio 2005¥Projects¥simple_renamer¥simple_renamer

あたりにsimple_renamer.exeがインストールされると思います。

ユーザー名の部分は適宜読み替えてください。

(恥ずかしながらClickOnceの仕組みがよく分かっていないのでどこにインストールされるのかは理解できてません…。)


使い方は


・第1引数にフォルダ名 (C:¥jpg)

・第2引数に対象ファイル名 (*.jpg)

・第3引数にファイルの先頭につける文字 (不要であれば””)

・第4引数に拡張子 (jpg)

・第5引数に連番の桁数 (2)


と5つ引数を渡して実行してください。

括弧内はサンプルです。


エラー処理などほとんど行ってません。

リネームできない場合(変換後の名前がすでに存在する場合)にはエラーで終了してしまいます。

また、連番は実行ごとに0からはじめるのではなく、前回の続きの番号になります。

(checknumというファイルを生成しているので、そのファイルの内容を0に書き換えれば、0からの連番を生成します。)

http://ykr414.com/dos/bat.html

コマンドプロンプトを使ってみよう! -バッチファイルとは?-

simple_renamerを動かすためのバッチを作っておいて、それをタスクに登録すれば上記の要望通りのことが実現できると思います。


バッチの例は以下の通りです。

以下の内容を sample.bat などとして保存し、タスクに登録してください。

(下記の例では簡単なログをsample.logに出力しています。)


echo --------------------------------------------------------------------------->> sample.log

echo START>> sample.log

echo DATE : %date% %time%>> sample.log

”C:¥Documents and Settings¥ユーザー名¥My Documents¥Visual Studio 2005¥Projects¥simple_renamer¥simple_renamer¥bin¥Release¥simple_renamer” C:¥jpg *.jpg ”” jpg 2 >> sample.log

echo END>> sample.log

http://www.hatena.ne.jp/#

はてな

URLはダミーです。

本当はVisual Basic 2005 Express Editionでそのまま開けるようにプロジェクトファイルを保存したら良いのでしょうが、ちょっとどれが対象のファイルか分からなかったので、メインの処理のソースファイルを以下に公開します。


Module Module1


Sub Main(ByVal CmdArgs() As String)

’ 引数のチェック

If CmdArgs.GetLength(0) <> 5 Then

Console.WriteLine(””)

Console.WriteLine(” file_rename Path TargetFile HeaderName ExtentionName DigitNumber”)

Console.WriteLine(””)

Console.WriteLine(” All 5 arguments are needed.”)

Console.WriteLine(”---------------------------------------------------------------------------”)

Console.WriteLine(” Path : File path”)

Console.WriteLine(” TargetFile : Target file name”)

Console.WriteLine(” HeaderName : Head of file name”)

Console.WriteLine(” ExtentionName : Extention name”)

Console.WriteLine(” DigitNumber : Number of digit which is used for sequential number”)

Console.WriteLine(”---------------------------------------------------------------------------”)

Exit Sub

End If

’ 変数の設定、引数を変数にセット

Dim MyPath As String

Dim TargetFile As String

Dim FileHeadName As String

Dim ExtentionName As String

Dim DigitNumber As Integer


MyPath = CmdArgs(0)

TargetFile = CmdArgs(1)

FileHeadName = CmdArgs(2)

ExtentionName = CmdArgs(3)

DigitNumber = CmdArgs(4)

Console.WriteLine(”---------------------------------------------------------------------------”)

Console.WriteLine(”Path : ” & MyPath)

Console.WriteLine(”TargetFile : ” & TargetFile)

Console.WriteLine(”HeaderName : ” & FileHeadName)

Console.WriteLine(”ExtentionName : ” & ExtentionName)

Console.WriteLine(”DigitNumber : ” & Format(DigitNumber, ”#”))

Console.WriteLine(”---------------------------------------------------------------------------”)

’ 処理の開始

Dim NumberFormat As String

Dim FileListArray() = New String() {}

Dim FileListArrayAfterChange() = New String() {}

Dim i, j As Integer

NumberFormat = ””

’ DigitNumberから数値フォーマット用の00...を生成

i = 0

Do While i < DigitNumber

NumberFormat = NumberFormat & ”0”

i = i + 1

Loop

’ 変換前、変換後の名前を保存する配列の初期化

’ counterにファイル一覧を取得し、その件数を配列にセット

Dim counter As System.Collections.ObjectModel.ReadOnlyCollection(Of String)

counter = My.Computer.FileSystem.GetFiles(MyPath, FileIO.SearchOption.SearchTopLevelOnly, TargetFile)

ReDim FileListArray(counter.Count)

ReDim FileListArrayAfterChange(counter.Count)

’ 連番の設定

’ checknumというファイルから読み込む

’ checknumが存在しない場合は、checknumに”0”をセットして生成

Dim StartNum As Integer

Dim checkFile As String

checkFile = Dir$(MyPath & ”¥checknum”)

If checkFile <> ”checknum” Then

My.Computer.FileSystem.WriteAllText(MyPath & ”¥checknum”, ”0”, False)

End If

StartNum = My.Computer.FileSystem.ReadAllText(MyPath & ”¥checknum”)

’ 対象ファイルの一覧をFileListArray()にセット

’ 設定に合わせてリネーム

j = 0

For Each FileName As String In My.Computer.FileSystem.GetFiles(MyPath, FileIO.SearchOption.SearchTopLevelOnly, TargetFile)

FileListArray(j) = FileName

My.Computer.FileSystem.RenameFile(FileName, FileHeadName & Format(StartNum, NumberFormat) & ”.” & ExtentionName)

’ リネーム設定を元に、変換後ファイル名を取得

For Each NewFileName As String In My.Computer.FileSystem.GetFiles(MyPath, FileIO.SearchOption.SearchTopLevelOnly, FileHeadName & Format(StartNum, NumberFormat) & ”.” & ExtentionName)

FileListArrayAfterChange(j) = NewFileName

Next

’ 変換前、変換後の対比を出力

Console.WriteLine(FileListArray(j) & ” -> ” & FileListArrayAfterChange(j))

j = j + 1

StartNum = StartNum + 1

Next

Console.WriteLine(”---------------------------------------------------------------------------”)

’ 次回連番開始の値(StartNum)をchecknumファイルに記録

Dim inputString As String = Format(StartNum, ”#”)

My.Computer.FileSystem.WriteAllText(MyPath & ”¥checknum”, inputString, False)

End Sub


End Module


プログラミング素人なので冗長なソースになっていると思いますが、ご容赦くださいませ。

◎質問者からの返答

ありがとうございます


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ