Gå til innhold

Anbefalte innlegg

Jeg er ute etter et program til å endre navn på en rekke filer. Jeg vet det finnes mange slike fra før av men de dekker ikke de behovene jeg har (ihvertfall ikke de jeg har testet foreløpig).

 

Det er snakk om en mappe med opptil flere hundre filer av en bestemt type (.jpg) som har filnavn som slutter på 001.jpg, 002.jpg, 003.jpg osv. Navnene skal endres slik at alle oddetall endres til nærmeste partall over og alle partall endres til nærmeste oddetall under. Altså: 001.jpg blir 002.jpg og 002.jpg blir 001.jpg.

 

Brukeren skal kunne velge hvilken mappe som inneholder filene og også hvor mange sifre det er i slutten av filnavnet.

 

Noen forslag?

Lenke til kommentar
Videoannonse
Annonse

For å finne ut om et tall er partall, eller oddetall, kan man som kjent bruke modulus (%)

 

altså:

public static bool IsPartall(string filename)
{
     return (int.Parse(System.IO.Path.GetFilenameWithoutExtension(filename)) % 2) == 0;
}

 

deretter kan du bruke System.IO.File.Move for å endre filen.

Endret av GeirGrusom
Lenke til kommentar

Hensikten? 2-300 bilder i jpg-format, som er lagret fra en pdf-fil. Bildene er rotert og i en slik størrelse at det er plass til to stykker på en A4-side i Word. Bildene skal settes inn i slutten av et større dokument med topp- og bunntekster. Hvis man setter inn bildene etter det opprinnelige filnavnet kommer side 2 til venstre og 1 til høyre når dokumentet skal leses.

Lenke til kommentar

DigitCount = ARGV[0].to_i || 3
Extension = '.jpg'

Dir.glob("*#{Extension}").each do |filename| 
 prefix = filename.gsub(Extension,'').gsub(/[\d]/, '')
 number = filename.gsub(Extension,'').gsub(prefix, '').to_i 
 number += (number % 2 == 0) ? -1 : 1
 number = number.to_s.rjust(DigitCount, '0')
 File.rename(filename, 'tmp_' + prefix + number + Extension)
end

Dir.glob("*#{Extension}").each do |filename|
 File.rename(filename, filename.gsub(/^tmp_/, ''))
end

 

Lagre scriptet i mappen som inneholder filene og kjør det slik:

ruby rotate_image_names.rb 5

Har du ikke ruby? Installasjonsfil her: http://rubyforge.org/frs/download.php/18566/ruby186-25.exe

Det tar et argument, som er "antall siffer i slutten av filnavnet".

 

Eksempel:

x40:images # dir
001.jpg 002.jpg 003.jpg
x40:images # ruby rotate_image_names.rb 4
x40:images # dir
0001.jpg 0002.jpg4 0004.jpg

Lenke til kommentar

Litt teoretisk C# kode:

 

public static int CompareFileInfo(System.IO.FileInfo a, System.IO.FileInfo b)
{
   return a.Name.CompareTo(b.Name);
}
public static void RenameFiles(string path)
{
   System.IO.FileInfo[] files = System.IO.Directory.GetFiles(path, "*.jpg");

   Array.Sort<System.IO.FileInfo>(files, new Comparison<System.IO.FileInfo>(CompareFileInfo));

   // Gå fra slutt til begynnelse, for å ikke kopiere over gamle filer
   for (int x = files.Length - 1; x >= 0; x--)
   {
       int index = 0;
       if (int.TryParse(files[x].Name, out index))
       {
           index += (index % 2 == 0) ? -1 : 1;
           files[x].MoveTo(index.ToString("000") + files[x].Extension);
       }
   }
}

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...