OSはWindows XPです。
Cドライブ直下に「jpg」フォルダがあります。
そのフォルダには日付と時間を参照した200601200121.jpg等のランダムに
名前が付けられたファイルが午前1時に定期的に40ファイル程度保存されます。
保存されるファイルの数はその時々で変わります。
1.このファイルを午前5時に連番のファイル名01.jpg、....40.jpgに変更したい
のですが実現する方法を教えて下さい。
2.この様な仕様をお知らせしアプリケーションを安価に作成してくれるSOHOの
方が集まるサイトがありましたら教えて下さい。
http://www.officetanaka.net/other/filevisor/index.htm
Office TANAKA - FileVisorの部屋
■ 複数ファイルの名前を、連番ファイル名に一括リネームする
ファイル名に規則性がないバラバラのファイル群を、指定した連番ファイル名に一括リネームします。つまり、こういうことです。
aaa.jpg 図01.jpg
bbb.jpg → 図02.jpg
ccc.jpg 図03.jpg
こういうソフトはあります。
いかがでしょう。
何をどのように「タスク」に登録すれば質問している方法を実現出来るか詳しく教えて頂けませんか?
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で読み込んでください。
実行時刻などは入れ直しです。
なお、変換元フォルダや出力先の指定を間違えると大変なことになります。
くれぐれも注意してください。
できるだけ、バックアップなどを行ってから試してください。
まだ良く見ていませんがなんとかなりそうです。ありがとうございます。
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
と入力して、あとは実行する時刻等を設定してください。
このプログラムはあくまでもサンプルとして作ったので、しっかりと検証をしていません。よって、このプログラムの使用によって万一損害が生じても、責任は取れませんのであしからず。
プログラムまで書いて頂きありがとうございます。
このような方法もあるんですね。非常に勉強になります。
もう少し回答を待ってみます。
簡単なコマンドラインツールを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
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
プログラミング素人なので冗長なソースになっていると思いますが、ご容赦くださいませ。
ありがとうございます
http://dotnetfan.org/blogs/dotnetfanblog/archive/2005/07/12/170....
どっとねっとふぁんBlog : ClickOnceの実験(Part2)
度々失礼いたします。
exeファイルがインストールされるフォルダの説明が不正確でした。
(前回の回答でお伝えした推測は、開発者用に生成されるファイルだったようです。)
C:¥Documents and Settings¥ユーザー名¥Local Settings¥Apps¥
以下のどこかにsimple_renamer.exeというファイルが保存されているはずです。
実行場所に依存するような処理を行っているわけではありませんので、適当なフォルダにコピーして使っていただければ良いかと思います。
(使い方として正しいかどうかは別として動きます。)
.NET Framework 2.0がインストールされていれば実行ファイルだけでも動きます。
”プログラムの追加と削除”にてsimple_renamerは削除していただいた上で、上記のファイルをダウンロード、展開していただき、そこに含まれるsimple_renamer.exeを実行してみてください。
引数の数が正しくない場合に表示する内容に一部誤りがありますが、出先から修正できないため、ご了承ください…。
(file_rename Path TargetFile HeaderName ExtentionName DigitNumber
と表示される最初のfile_renameはsimple_renamerと修正すべきでしたが、忘れておりました。orz)
定期的な時間での変更を希望していますがこちらで出来るのでしょうか?手動ではなく決まった時間に自動で変更したいのです。