こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

自動でリネームするバチファイルの作り方

ファイル名の変更を自動で行うバッチファイルを作りたいのでですがどなたかお知恵を貸してください。

・あるネットワーク上のフォルダには随時ファイルが書き込まれます。
・そのフォルダを監視し、追加された事を検知するとバッチファイルを自動的に実行します。
 (この処理はフリーソフトで実現できるようです)

バッチファイルで実現したい事はその追加されたファイルの名前の先頭部分(固定長)を切り取る事です。
ファイル名のフォーマット xxxxxxxxxxxx-yymmdd-hhmmss.txt
上記のファイル名の先頭のxxxの部分をハイフンまで切り取りたいのです。
先頭部分を切り取ってもファイル名が重複する事はありません。
元のファイル名の書式を変更する手段はないので書き込まれた後で変更するしかありません。
つまり、フォルダ上にあるファイルの名前の長さを判定し、規定値を超えていたら切り取り(リネーム)をするという事です。
一度にいくつのファイルが書き込まれるかは分かりませんので該当するファイルがある限り処理をする必要があります。

投稿日時 - 2009-03-07 14:32:24

QNo.4776120

すぐに回答ほしいです

質問者が選んだベストアンサー

具体的に書いてないので、「20文字以上だったら、16文字目以降を残す(1文字目から15文字目までを削除」ということにします。
(ファイル名には空白は無いものとして簡易化してます)

rem 拡張子がTXTのすべてのファイルについて処理
for %%F in (*.txt) do call :sub %%F
goto :EOF
rem 処理の中身
:sub
set A=%~1
rem 21文字目以降が無ければ何もしない
if "%A:~20" == "" goto :EOF
rem 16文字目以降を取り出す
set B=%A:~15%
rem リネーム
ren %A% %B%
goto :EOF

投稿日時 - 2009-03-08 08:46:49

補足

先ほどお礼を書いたのですが、その後改めて動作確認したところ、ファイル名の長さが正常に判定されず、一度処理したファイルが次に実行した時も対象になってしまい、ファイル名がどんどん短くなってしまいます。

ファイル名が一定の長さ以上かどうかを正確に判断するにはこのコードではうまく動作しないのでしょうか?

投稿日時 - 2009-03-09 11:41:29

お礼

回答ありがとうございました。
この方法でうまく行きました。
処理を実現するために半日以上もかけてフリーソフトを探していましたが、バッチファイルでこんなに簡単に実現できるとは感激です。

投稿日時 - 2009-03-09 10:01:04

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

こんにちは。#1です。
>質問を投稿してから調べていたら WSHなどを使って高度なスクリプトが書ける事が分かりました。それを使って上記の処理を実現するにはどうすればいいでしょうか?
スクリプトさえできれば、先の監視実行ツールで起動させたら宜しいのでは?
バッチファイルも不要かもしれません。

投稿日時 - 2009-03-08 11:47:23

お礼

その方法で実現できました。
ありがとうございます。

投稿日時 - 2009-03-09 12:52:34

ANo.2

jmh

setlocal enableextensions enabledelayedexpansion
for %%i in (*-*-*.txt) do (
  set OLD=%%i
  set NEW=!OLD:~-17!
  echo !OLD! を !NEW! に rename する
)

投稿日時 - 2009-03-08 04:43:07

お礼

ありがとうございました。
希望通りの処理が実現できました。

投稿日時 - 2009-03-09 12:51:49

ANo.1

こんにちは。
バッチファイルでは無理です。
少なくともVBS(VisualBasicScript)などを利用しなければ。

投稿日時 - 2009-03-07 16:44:28

補足

回答ありがとうございます。
質問を投稿してから調べていたら WSHなどを使って高度なスクリプトが書ける事が分かりました。
それを使って上記の処理を実現するにはどうすればいいでしょうか?

投稿日時 - 2009-03-07 17:25:42

あなたにオススメの質問