web-dev-qa-db-ja.com

バッチファイルを使用して、ファイル名の最後(ただし拡張子の前)にテキストを追加する

左のフォーマットのファイルのリストがあります。次のように、各ファイル名に文字列を追加しますが、拡張子はbeforeです。

File 1.txt  ->  File 1 version 1.txt
File 2.txt  ->  File 2 version 1.txt
File 3.txt  ->  File 3 version 1.txt
File 4.txt  ->  File 4 version 1.txt
...

どちらの場合も、追加される文字列はすべてのファイルで同じです。

これは簡単な作業のようですが、これをバッチファイルに入れるのに問題があります。

私はrenコマンドを試し、 このページ の例にいくつか従いましたが、結果のファイル名にはafter拡張子:

File 1.txt version 1.txt
18
TheTurkey

ファイル名が長い場合は、ブロックに?の質量のある?????????を追加する必要があります。

ren *.?* ????????????????????????????????????????????????????????" version 1".*
6
bummi

renの文書化されていない癖に頼るのではなく、なぜこれを適切な方法で行わないのですか?

for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"

これをバッチファイルで使用する場合は、%記号をそれぞれ2倍にしてください。

40
Karan

コマンドに慣れていない人(私のように)には、名前の一括変更を非常に簡単にするいくつかのソフトウェアがあります。

  • 一括名前変更ユーティリティ(オープンソースなし)
  • 名前を変更する! (オープンソース)
2
MagTun

"_A"を複数のファイルに追加したかったので、これを実行しました。

最初に拡張子を削除し、サフィックスを追加してから、拡張子を元に戻しました。私はプログラマーではないので、それは確かにうまくいき、バッチコードをシンプルに保ちました。

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf
2

@bwDracoのソリューションは優れていましたが、よりシンプルに保つことができました。私のファイルのセットはすべて* .jpgであり、それらの名前をすべて* c.jpgに変更したいと考えていました。このために必要な手順は2つだけで、3つではありません。

ren "{filepath}\*.jpg" *.
ren "{filepath}\*" *c.jpg
1

サブフォルダーを再帰的に

#!/bin/bash
# Warning: globstar excludes hidden directories.
# Turn on recursive globbing (in this script) or exit if the option is not supported:
shopt -s globstar || exit
for f in **
do
if [ -f "$f" ]; then
   extn=${f##*.} # save the extension of the file
   #mv "$f" "${f%.*}"_suffix.${extn};
   mv "$f" "${f%.*} version 1".${extn};
fi
done
0
Ferroao