1

次のような名前のファイルが本当にたくさんあります。

1_x_0_a.jpg, 1_x_0_b.jpg, 1_x_5_a.jpg ... 15_x_160_a.jpg, 15_x_160_b.jpg, 15_x_165_a.jpg

ファイル名を次のように変更したいと思います。

01_x_000_a.jpg, 01_x_000_b.jpg, 01_x_005_a.jpg  

したがって、x の前は 2 桁の数字で、x の後は 3 桁の数字でなければなりません。

4

3 に答える 3

2

次のコードは、MATLAB の比較的新しいバージョンで動作するはずです。

fileStruct = dir;
files = {fileStruct.name};
for oldFile = files
    oldFile = oldFile{1};  //Takes string out of cell

    // Embedding the sprintf in a regexprep only works in certain versions
    newFile = regexprep(oldFile, '^(\d*)', '${sprintf(''%02d'', str2num($1))}');
    newFile = regexprep(newFile, '(?<=_)(\d*)(?=_)', '${sprintf(''%03d'', str2num($1))}');

    movefile(oldFile, newFile);
end
于 2013-01-31T21:04:29.350 に答える
0

以下に役立つ手順をいくつか示します。

  1. dirファイル名のリストを取得するために使用します。
  2. regexprep開始番号を先行ゼロで開始番号に置き換えるために使用します
  3. regexprep数字を 2 つまでのゼロで開始することにより、中間の数字を置き換えるために使用します
  4. renameファイル名の変更に使用

私はそれを試していないことに注意してください.renameのドキュメントはftpサイトを参照しているため少し奇妙ですが、うまくいくかもしれません. うまくいかない場合は、すべてのファイルをコピーしてから古いファイルを削除するだけでよいと思います。

于 2013-01-31T16:15:02.150 に答える
0

Unix または Linux マシンを使用している場合は、次の小さなシェル スクリプトを試すことができます。

ターミナルで、ファイルがあるディレクトリに移動します。

ファイルの名前を実際に変更せずに最初に試してみてmvくださいecho

for file in *; do
  mv $file $(echo $file | awk -F '_' '{ printf "%02d_%s_%003d_%s\n", $1, $2, $3, $4 }')
done

またはワンライナーとして

for file in *; do mv $file $(echo $file | awk -F '_' '{ printf "%02d_%s_%003d_%s\n", $1, $2, $3, $4 }'); done

ファイルの場合

1_x_0_a.jpg
1_x_0_b.jpg
1_x_5_a.jpg
15_x_160_a.jpg
15_x_160_b.jpg
15_x_165_a.jpg

私は結果を得る

01_x_000_a.jpg
01_x_000_b.jpg
01_x_005_a.jpg
15_x_160_a.jpg
15_x_160_b.jpg
15_x_165_a.jpg
于 2013-01-31T16:24:47.877 に答える