Birçok dosyaları otomatik bir kez yeniden adlandırmak - yyyymmdd.file için ddmmyyyy.file

6 Cevap php

Ben bir yanlış dateformat ile adlandırılırlar 1500 dosyaları var. Ben bunları yeniden adlandırmak istiyorum. Bunu yapabilecek bir araç var mı? Aksi php kod parçası.

File names are: ddmmyyyy.xls (e.g. 15012010 for 15.th Jan 2010)

and I would like: yyyymmdd.xls (e.g. 20100115.xls)

Bu bir 1500 dosyaları için yapılabilir konusunda herhangi bir ipucu gitmek?

BR. Anders


UPDATE: Also tried the MP3TAG, that is suggested in one of the answers. It is a free tool and also did the job. It took a while to figure out how to use it. If you wanne try do this:

  1. yapılandırmada düzenlenebilir dosyalar listesine xls (veya başka bir biçim) ekleyin
  2. dosyalarını yüklemek ve düzenlemek istediğiniz bölmedeki dosyaları işaretlemek için klasörü seçin
  3. Düğmesi - Ben "Hızlı dönüştürme" tıkladım. Gelecekteki kullanım için schemaes kaydetmek de mümkün ama nasıl çözemedim.
  4. "convert - hızlı" tıkladıktan sonra "regex kullanarak" seçiniz (sadece regex opsiyon)

Ve o zaman sadece yeniden adlandırma işlemek için bilgi ekleyebilirsiniz. Benim durumumda:

  • alan: _FILENAME
  • dan: ([0-9] {2}) ([0-9] {2}) ([0-9] {4})
  • : $ 3 - $ 2 - $ 1

Şimdi 15012010.xls (ddmmyyyy.xls) adlı tüm dosyaları 2010-01-15.xls adı olacak

6 Cevap

İşte bir başlangıç ​​(denenmemiş, ama fikir almalısınız) bulunuyor.

$files = glob('your/folder/*.xls');

foreach($files as $file) {

    preg_match_all('/^(\d{2})(\d{2})(\d{4})\.xls$/', basename($file), $matches);

    if ( ! $matches) continue;        

    $year = $matches[0][3];
    $month = $matches[0][2];
    $day = $matches[0][1];

    $newFilename = $year . $month . $day . '.xls'; 
    rename  ( $file, dirname($file) . '/' . $newFilename );

}

Eğer dosyaları ile bir Linux makine varsa ... Yapmanız bash kullanabilirsiniz:

for f in *.xls; do
    mv $f "$(echo $f | cut -c4-8)$(echo $f | cut -c3,4)$(echo $f | cut -c1,2).xls"
done

Dosya kalıp dönüştürme yapabileceğiniz bir araçtır Mp3tag.

convert seçin ve ardından filename - filename.

Ben de orada diğer araçlar vardır eminim!

(Bu cevap StackOverflow ruhu değil gerçekten ama OP mutlaka otomatik bir çözüm arıyor olmadığını düşünüyorum ...)

alex function göre, ancak bu bir doğru .xls uzantısını ekler.

foreach (glob('/path/to/your/*.xls') as $file)
{
    rename($file, dirname($file) . '/' . substr(basename($file), 4, 4) . substr(basename($file), 2, 2) . substr(basename($file), 0, 2) . '.xls');
}

Eğer bash varsa

#!/bin/bash

shopt -s nullglob
for xls in [0-9]*.xls
do
    day=${xls:0:2}
    mth=${xls:3:2}
    yr=${xls:4:4}
    echo mv "$xls" "${yr}${mth}${day}.xls"
done

hiçbir dış araçları gerekir.

File names are: ddmmyyyy.xls (e.g. 15012010 for 15.th Jan 2010)

and I would like: yyyymmdd.xls (e.g. 20100115.xls)

Bu komut dosyasını kullanın.

# Script RenameYYYYMMDD.txt
var str dir, list, file, newname, dd, mm
lf -r -n "*.xls" $dir > $list
while ($list <> "")
do
    lex "1" $list > $file ; stex -p "^/^l[" $file > $newname ; chex "2]" $newname > $dd
    chex "2]" $newname > $mm ; sin "^.^l" ($mm+$dd) $newname > null
    system rename ("\""+$file+"\"") $newname
done

Bu script biterscripting olduğu (http://www.biterscripting.com). Bir test klasöründeki Senaryoyu ilk test edin.

Test dosyayı "C :/ Scripts / RenameYYYYMMDD.txt" in script kodunu kaydedin ve aşağıdaki komutu girin.

script "C:/Scripts/RenameYYYYMMDD.txt" dir("C:/path/to/test folder")

Bu komut yyyymmdd.xls "C :/ / yol / sınama klasörü" dizini altındaki tüm dosyalar ddmmyyyy.xls yeniden adlandırın.