今画像ファイルの整理をしているのですが、1から200まで連番をふりたいと考えています。
ですが、現状ファイル名の命名規則がバラバラに成っており困っています。
具体的には、桁数によって以下のように異なっています。
一桁 1-ファイル名.jpdg
二桁 12-ファイル名.jpeg
三桁 210-ファイル名.jpeg
この冒頭の数字を全て三桁にし、1→001、12→012という形に変更したいのですが
ファイル数が多いため、1個ずつファイル名を変更して0を加える方法だと時間がかかります。
一括してこのファイル名の数字を3桁に変更するいい方法があれば教えて下さい。
No.1
- 回答日時:
3桁のものはいじらないのですね。
そうであればいじるのは1桁と2桁のものだけ。
そうなると数はそう多くはないので手作業で付け加えたほうが早いかも。(最大でも99個?)
No.2
- 回答日時:
昔の富士フィルムのfinpixviwerには
画像ファイル名を一括で連番に変更する
機能がありました。
質問者さんのご要望通りの変更になります。
今でも、そういうソフトは探せばあると思います。
No.3
- 回答日時:
リネームソフト使えば一瞬ですよ。
大抵のソフトが桁数指定しての連番処理には対応しています。
http://www.forest.impress.co.jp/library/software …
http://www.vector.co.jp/vpack/filearea/win/util/ …
No.4
- 回答日時:
'ツールも何もいりません。
メモ帳があれば簡単にできます。VBScriptをちょこっと作ってみました。'まずは、下のd:\testを、質問者さんのファイルが保存されているフォルダに書き換えてください。
'次に、この回答をメモ帳にコピーして、henkou.vbs等に拡張子を変えて保存してください。
'保存したhenkou.vbsをダブルクリックして実行すると全て1.txt→001.txt、 12.jpg→012.jpg等のように3桁にファイル名が変わります。
'ただし、ご質問に書いてある条件以外の例外があった場合は、動作保証はしません。
'やり直しがきかないので、かならず、ファイルのバックアップをしてから行ってください。
Option Explicit
Const FOLDERPATH = "d:\test" '←名前を変更したいファイルが格納されているフォルダー名を指定(必ずフルパスで)
Dim oFSO
Dim oFolder
Dim oFile
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(FOLDERPATH)
Dim sOldFName
Dim sNewFName
Dim sPriName
Dim sSufName
dim sfo, gfile
set sfo = createobject("scripting.filesystemobject")
For Each oFile In oFolder.Files
sOldFName= oFile.Name
sPriName = Left(sOldFName,Instr(sOldFName,".")-1)
sSufName = Right(sOldFName,len(sOldFname)-Instr(sOldFName,".")+1)
sNewFName = Right("00" & sPriname ,3) & sSufName
If sNewFName <> sOldFName then
'WScript.Echo sNewFName
set gfile = sfo.getfile(FOLDERPATH & "\" & sOldFName)
gfile.name = sNewFName
End If
Next
No.5
- 回答日時:
'すみません.
'訂正します。 ファイル名のハイフンは半角の"-"であることが条件です。
Option Explicit
Const FOLDERPATH = "d:\test" '←名前を変更したいファイルが格納されているフォルダー名を指定(必ずフルパスで)
Dim oFSO
Dim oFolder
Dim oFile
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(FOLDERPATH)
Dim sOldFName
Dim sNewFName
Dim sPriName
Dim sSufName
dim sfo, gfile
set sfo = createobject("scripting.filesystemobject")
For Each oFile In oFolder.Files
sOldFName= oFile.Name
sPriName = Left(sOldFName,Instr(sOldFName,"-")-1) ' "-"が←全角の場合は"-"に変更してください
sSufName = Right(sOldFName,len(sOldFname)-Instr(sOldFName,"-")+1) ' "-"が←全角の場合は"-"に変更してください
sNewFName = Right("00" & sPriname ,3) & sSufName
If sNewFName <> sOldFName then
'WScript.Echo sNewFName
set gfile = sfo.getfile(FOLDERPATH & "\" & sOldFName)
gfile.name = sNewFName
End If
Next
No.6
- 回答日時:
私は、No3と同じで アプリ派です。
こちらの方が、とても使い勝手があり、いろんな場合に対応可能です。ただ、会社だと今フリーのソフト系は禁止であることが多く、承認が必要となり面倒なので、会社では、使いまわしが簡単なBATを作成させていました。初期の頃はNo4,5さんと同じようにVBS 又はJScript で作らせていましたが、最終的に、
JScript
DOSによるBAT
が残りました。JScriptは新人教育すると、文系の人でもなじみがあることが理由ですね。VB系は確かに学校で習うようですが、個人ではJavaScriptの使用経験が断然多いようです。
で、さらに問題になったのが、CUIでの経験のなさでPATHと言う単語も機能も理解していない。そんなのありえないだろう。と思う方がいると思うが、実はそうなんです。それが実態。そこで、DOSでのBATか、CScriptでの実行を命じています。これは教育をかねての事です。
で、そのサンプルを使用して、5分程度で作ってみました。
------- a.cmd -------
@echo off
setlocal
set pic=0
set total=0
for %%a in ("*.jpg" "*,jpeg" "*.jpdg") do (
call :Permute "%%a"
)
echo\
echo ReName file Count = %pic%
echo Total Count = %total%
goto :EOF
:Permute
set /a total+=1
set _tmp_name=%~n1
for /f "tokens=1,* delims=-‐" %%b in ("%~1") do (
echo %total%
echo %1
set _tmp_moji1=%%b
set _tmp_moji2=%%c
)
rem echo b=[%_tmp_moji1%]
rem echo c=[%_tmp_moji2%]
set _tmp_moji3=000%_tmp_moji1%
set _tmp_moji4=%_tmp_moji3:~-3%
rem echo _tmp_moji4=[%_tmp_moji4%]
rem 変更後のファイル名をセット
set _tmp_moji5=%_tmp_moji4%-%_tmp_moji2%
echo _tmp_moji5=[%_tmp_moji5%]
echo\
rem ファイル名を変更する
rem ren %1 %_tmp_moji5%
goto :EOF
endlocal
------------------
エラー処理や、多様なケースには対応していません。自分で勉強して追加してください。また、これは使い回しが容易にできるように元のパターンを崩さずに作っていますので、余計な処理というか書式になっています。
echo はでバック用として使ってください。変数チェックですね。
rem がコメントアウトなので、「ファイル名を変更する」の直下の rem を削除すると、実際にファイル名を変更してしまいます。
上記の実行には条件があり、
これは、DOS窓を起動し、対象フォルダーに移動して、そこで実行する事。区切り文字は「三桁 210-ファイル名.jpeg」のサンプルにある半角又は全角のハイフンを使用しています。拡張子は、意味不明だったので、多数列挙しています
DOSコマンドをよく理解したうえで使いまわしてください。
新人教育はこの質問のよな課題をだしています。あれ、これもその課題ですかね????? これを卒業すると、初めてエクセルやパワーポイントなどのVBAに移ります。VBAを教えるわけではなく、操作と自動化というテーマですね。
No.7
- 回答日時:
No6ですが、
まだ質問が閉じられていないようなので訂正と追加を。
6行目の
>for %%a in ("*.jpg" "*,jpeg" "*.jpdg")
で、"*,jpeg" => "*.jpeg" ですね。カンマになっていましたね。でJScriptもサンプルを変更してちょこっと作成してみました。
-------- c.js -----------
/*
パラメーターにフルパスを指定しない場合、実行時のカレントフォルダーのみを検索して変更する。
*/
var s = new ActiveXObject("Scripting.FileSystemObject");
try{
var path = WScript.Arguments.Unnamed.Item(0);
} catch(para_er){
var path = s.GetAbsolutePathName(".");
}
// 探知用正規表現変数作成
var MyReg = new RegExp().compile("^([0-90-9]*)[-‐]");
// 拡張子で対象とするファイルのフィルター用正規表現変数作成。対象外は削除すること。
var MyRegExt = new RegExp().compile("(jpg|jpe|jpeg|jpdg)","i");
// 指定されたパスからファイルオブジェクトのコレクションを取得
var tfiles = new Enumerator(s.GetFolder(path).files);
// ファイルの処理
for (;!tfiles.atEnd();tfiles.moveNext()) {
var file=tfiles.item();
var ext = s.GetExtensionName(file.Name);
if(null != ext.match(MyRegExt)){
WScript.echo("file=" + file.Name + " ext=[" + ext + "]");
// 探知
//var hits = file.Name.match(MyReg);
// MyReg.Execute(file.Name);
var hits = MyReg.exec(file.Name);
if(null != hits){
if("" != hits[1]){
var tmp1="000" + hits[1];
var tmp2=tmp1.substring((tmp1.length -3), (tmp1.length + 1));
WScript.echo("hits=[" + hits[1] + "] fix=" + tmp2 + " RegExp.rightContext=" + RegExp.rightContext + "\n");
try{
// ファイル名変更
// file.Name = tmp2 + "-" + RegExp.rightContext;
}catch(ren_er){
// 変更時のエラー処理。下記は仮に同名ファイルが存在した場合
// file.Name = tmp2 + "b-" + RegExp.rightContext;
}
}
}
}
}
-------------------------
やはり5分程度で作成したので前回と同様、どこかにケアレスミスがありましたら、どうもすみません。適当に編集して作り変えてください。特に // でコメントアウトしている「ファイル名変更」はコメントアウトを外さないと名前が変更されません。
コマンドプロンプトを起動し
>cscript //nologo "指定フォルダー フルパス"
で実行することを想定しています。それで、一度リストを作成し、どのように変更されるかファイルに保存してからエディターなどで確認してから実行しましょう。
サブフォルダー以下も検索したければ、自分で改変してください。まあ、パスを指定すればできるので、変えなくてもできますが・・・
今日は特に暇だったので、大サービスです。
No.8
- 回答日時:
Windows用のファイル管理ツールにはそういうことが一括で出来る機能を有したものがあります。
私がそれを使用しているのですが、表示するときはゼロサプレスされていないファイル名でも順番通り表示されるので、リネームするファイルを選択状態にし、右クリックで「連番で名前を変更」を選択。
リネームするファイルの規則を入力して実行するとあっという間に希望通りの結果になります。
※リネーム規則に「#03#-ファイル名.jpg」とするとゼロサプレスした連番が付与されます。
もちろん、Perlなどのスクリプトを使用しても実現できます。
でも、実行して失敗すると更に取り返しの付かない状態になるので(笑)、失敗してもいいようにコピーしてから試しましょう。
ちなみに私が使用しているファイル管理ソフトは「FileVisor」という有償ソフトです。
No.9
- 回答日時:
http://www.lightship.co.jp/FileVisor6/help/overv …
http://anago.2ch.net/test/read.cgi/software/1352 …
この辺だろうか。まあ、よくある問題のあるアプリね。一時総務課でつかっていたなあ~~~~
7が出てよくなったのだろうか? アプリでやると、使い込んでいないと、逆にどううしよもなく、できないことがたくさん(笑う)。
私も、わたされたが、まあ開発環境やサーバーには入れならないね。ライセンスがもったいない。
この程度の問題、金かけてどうするんでしょうね。うちの会社なら、内緒で買うか、個人で買うか。総務かも今では誰も使っていないし、なので6までしかないけどね。
ちなみに、質問内容だと「このファイル名の数字を3桁」となっていて、元のファイル名に在る数字にゼロをつけたいようなんだけど、"#03#"指定でできんですかね? まあ、仕様が明確に書いていないので、適当に割り振っても正解かもしれませんがね。
https://www.google.co.jp/search?hl=ja&q=FileViso …
まあ、金余って土地勝ったり、保養所たてたりするような会社なら買ってもらえるでしょうね。。まあ、それでもサーバーとか開発環境には入れたくないアイテムだね。ましてや事務専門職にしか用がないアイテムじゃね。昔のように、マシン購入時にこっそり稟議書にまぎれこませて買うしかないだろうね。「これなんだね君。」「はいテストで使います。自動化のためのソフトです」
http://www.gizcollabo.jp/vbtomo/log/archive/vbqa …
この程度に、初心者でも挑戦しているようなロジックなので、入門編としては最適でしょう。
まずは、何もマシンに追加しない状態で何ができるか、考えましょう。perl入れたら、そのメンテナンスしないとだめだし、過去入れて、「これ、削除していんですか?」なんて事務職員がよく聞いてくる。そんな面倒にならないように気おつけましょう。
No.10ベストアンサー
- 回答日時:
No9ですが、あった~、
>、"#03#"指定でできんですかね? まあ、仕
http://www.lightship.co.jp/FileVisor7/help/opera …
バージョン7 の操作説明書みたいですね。ファイル名の一部を使用して連番する機能ではないですね。正規表現が使えるようなので、マクロ(内部スクリプト)があれば、できるかもしれないね。まあ、普通に考えれば、検索などツール上でファイルの絞込みに使われるのでしょう。
単純な連番には対応しているので、Windowsのエクスプローラーで全部選択して名前変更で、できる連番以外なら有効につかえるでしょう。
もっと使い方を学ばないと、確かな事は言えませんが。そこで、もう少し見てみると
http://www.lightship.co.jp/FileVisor7/help/opera …
に置き換え機能があるので、正規表現が使えそうだが、これと「連番で名前を変更する」機能を組み合わせたスクリプトが組めればいいのだが? どこかの説明に「マクロ」と記述されていた。が、メニュー見ても付属ツールみてもマクロらしきものが無い。
となる。そこまでして、使いこなすほどのソフトなんですかね? これならエクセルとVBAを取得してもらった方がよっぽど会社のためになるが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
ftp処理でmove(移動)を行いたい
-
ファイル名に ” を使うと エク...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
バッチコマンドでファイル名の...
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
バッチ処理で16進数でファイル...
-
【バッチファイル】forコマンド...
-
VBA GetAttrについて教えてくだ...
-
【Access】エクスポート時のフ...
-
エクセルVBAを使用してJPGファ...
-
access,vbaでフォルダ内のファ...
-
ファイル名に大文字が含まれて...
-
看護師です。以下の文章のマク...
-
【VBScript】※渡したい変数のみ...
-
DOSのバッチ作成について‐FORの...
-
フォルダ内の更新日時が一番新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
ftp処理でmove(移動)を行いたい
-
[DOS] コピー先に同じファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
コマンドプロンプトで変数が数...
-
バッチコマンドでファイル名の...
-
.batでファイル名から抽出して...
-
ファイル名に ” を使うと エク...
-
サブフォルダからファイルをコ...
-
フォルダ内の更新日時が一番新...
-
Windowsコマンドプロンプトで、...
-
DOSのバッチ作成について‐FORの...
-
VBA GetAttrについて教えてくだ...
-
バッチ処理で16進数でファイル...
-
【DOSバッチ開発】末尾のタブの...
-
【vbs】ファイル名の検索と該当...
-
access,vbaでフォルダ内のファ...
-
word VBA ファイル名 保存
おすすめ情報