2017-08-02 10 views
-2

フォルダ内にたくさんのファイルがあります。このフォルダ内のすべてのファイルの先頭に連番を追加します。また、ファイルはアルファベット順ではなく、サイズ順に並べ替えたい。フォルダ内のファイル名の先頭に連続番号を追加します。

例:ファイル "something.mp3"は、フォルダ内で最大のファイルであれば "01 - something.mp3"に名前を変更する必要があります。私はWindows上でそれをしたい。

+3

いいアイデア。あなたが終わったら私たちに教えてください。 – Stephan

+0

これはbashでタグ付けされていますが、BashソリューションまたはWindow cmdのみを要求していますか? – daniu

+0

可能であれば、それをWindows上で行いたいと思います。それがなければ、私はBashでやりたいと思います。 –

答えて

1
ls -1S | awk '{print "mv \"" $0 "\" \""NR "_" $0"\";"}' | bash 

パースls出力が推奨されてしかし、あなたが知っている場合にのみ、あなたのファイル名がいずれも含まれていないこれを使用異常な文字Read more here

+0

あなたのソリューションはBashで完璧に動作します、ありがとう!私はGit CMDを使ってWindows上で実行しました。 –

1

バッシュ:

I=0; for FILE in `ls -S`; do mv $FILE "$I - $FILE"; I=$((I+1)); done 
0

お使いのOSがアルファベット順にファイルを一覧表示可能性があるため、私はいくつかの点でprintfの使用をお勧めします(これが生成されます "0001 - file1.mp3"、 "0002 - file2.mp3" など)。パディング0の数を変更するには、printf%0 dの別の数字を使用します。

N=1 
while read -r file 
do 
    mv "$file" "$(printf %04d $N) - $file" 
    N=$((N+1)) 
done < "$(ls -S)" 

(またはあなたが逆のソート(最小の最大を)したい場合"$(ls -rS)"を使用しています。

+0

これをバッチスクリプトで実行しようとしましたが、何も起こりませんでした。 –

0

FORコマンドは、ファイルサイズを決定するために、バッチファイルで使用することができます。

for %%F in (*.mp3) do echo [%%F] is [%%~zF] bytes 

テキストソートでサイズ10がサイズ2よりも前に来るので、適切に並べ替えるためにはいくつかの作業が必要です。

DIRコマンドは、サイズ順にファイルをリストするために使用することができます。

dir /os *.mp3 
dir /o-s *.mp3 
dir /b /o-s *.mp3 > filesbysize.txt 

次にあなたがそのファイルを読み、あなたのリネームロジックをやって起動するFOR /Fを使用することができます。

SET /Aコマンドを使用して整数の数学を行うことができますので、必要な接頭辞を決定するためにカウンタをインクリメントする方法を見つけることができます。

これらのコマンドでそれぞれ遊ぶように準備してください。学習曲線は悪くないが、ゼロではない。

幸運を祈る!

関連する問題