質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

4回答

8958閲覧

batファイルで、先頭や末尾以外に文字を追加したい

arimura

総合スコア8

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/10/01 10:57

大量のファイル名に文字を追加したいと考えております。

文字列の先頭や末尾では無く、拡張子を除いて末尾から三番目以前に文字(_hoge)を追加したいのです。
以下は末尾に入れるコードなのですが、

@echo off rem 実行バッチファイル名を取得 set add=%~n0 for %%i in (*) do ( rem 実行バッチファイル自身以外に実行 if not %%i==%~n0%~x0 ( rem ファイル名の末尾に追記 ren %%i %%~ni_%add%%%~xi ) ) pause

例:
abc_01.jpg
abcdef_01.jpg
hogehoge_01.jpg

を、下記のように
abc_hoge_01.jpg
abcdef_hoge_01.jpg
hogehoge_hoge_01.jpg

とするにはどのように書き替えたら良いでしょうか?
お力を貸して下さい。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

CMD

1@echo off 2set add=%~n0 3for %%i in (*) do ( 4 if not %%i==%~nx0 ( 5 call :rename %%i 6 ) 7) 8pause 9goto :EOF 10 11:rename 12set A=%~n1 13ren %1 %A:~0,-3%_%add%%A:~-3%%~x1 14goto :EOF

投稿2018/10/01 12:37

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arimura

2018/10/01 13:07

感謝してます。早々と本当にありがとうございました。
Turkis_Mond

2018/10/01 13:22

:rename の最後はgoto :EOF ではなく exit /b だと思います。
otn

2018/10/01 13:32

exit /b がなくても、ファイル末尾に到達すると終わります。
Turkis_Mond

2018/10/01 14:01

同じくで goto :EOFがなくとも終わりますが、 callされた処理での終端は exit /b 付与がスタンダードと思います。
otn

2018/10/01 14:07 編集

> goto :EOFがなくとも終わりますが、 はい。自分で使うときは書きません。 相手が、後ろにコードを継ぎ足したときに、あれ?と思わないように、こういう場では書いています。 > callされた処理での終端は exit /b 付与がスタンダードと思います。 好みでは?私は、リターンコードを返すときだけexit /bを使っています。 常にexit /bを使えば、goto :EOFという機能は不要なので、そういう方針も賛成です。
Turkis_Mond

2018/10/01 14:20

好みと言われればそれまでかも知れません。 メインルーチンのラストのみgoto :EOF サブルーチンラストはexit /b とする規約で可読性と分割時の移植性や拡張性を担保しておりました。 書き捨てコードならどうでもいい話かと思います
otn

2018/10/01 14:26

exit /bで統一というのなら分かりますが、その使い分けは分からない。気分の問題でしょうか。
guest

0

BAT

1@echo off 2rem for文ループ内で変数へ代入しその後値参照するため遅延変数展開を用いる 3setlocal enabledelayedexpansion 4for %%i in (*) do ( 5 rem 実行バッチファイル自身は除外 6 if not "%%i"=="%~nx0" ( 7 rem %%iのファイル名部文字列を変数fnに代入 8 set fn=%%~ni 9 rem 新ファイル名はfnの0文字目より右から4文字目までの切り出しと_hogeとfnの右端3文字の切り出し 10 ren "%%i" !fn:~0,-3!_hoge!fn:~-3,3!%%~xi 11 ) 12) 13pause

投稿2018/10/01 12:52

編集2018/10/01 13:32
Turkis_Mond

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arimura

2018/10/01 13:06

感謝してます。早々と本当にありがとうございました。
guest

0

%%iを一旦別の変数に格納し、更に遅延環境変数にする必要があります。
遅延環境変数は先頭でsetlocalをするのと、ループ内では!で囲みます。

BAT

1@echo off 2setlocal enabledelayedexpansion 3 4rem 実行バッチファイル名を取得 5set add=%~n0 6 7for %%i in (*) do ( 8 rem 実行バッチファイル自身以外に実行 9 if not %%i==%~n0%~x0 ( 10 rem ファイル名の末尾に追記 11 set str=%%i 12 echo %%i !str:~0,-7!_hoge!str:~-7! 13 ) 14) 15 16pause

投稿2018/10/01 11:57

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arimura

2018/10/01 13:07

感謝してます。早々と本当にありがとうございました。
guest

0

「_01.jpg」の文字数が固定(7文字)の場合に限る。

bat

1@echo off 2setlocal enabledelayedexpansion 3 4for %%f in ("*.jpg") do ( 5 set STR=%%f 6 echo !STR:~0,-7!_hoge!STR:~-7! 7)

参考:BATファイルで文字列の切り出し

投稿2018/10/01 11:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arimura

2018/10/01 13:07

感謝してます。早々と本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問