Gå til innhold

Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

Det er snakk om arbeid som gjentas ofte. Joda, jeg har ikke noe problem å vite at det går, spørsmålet er om noen har noe liggende som kan brukes som utgangspunkt eller som har konkrete forslag. Har Visual Studio Express.

Skrevet

Du kan jo se på hvordan man bearbeider filsystemet/filer i .NET.

 

Hvilken praktisk hensikt har dette?

(Er jeg så dum at jeg ikke har "tatt" det allerede?)

Skrevet (endret)

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
Skrevet

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.

Skrevet

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

Skrevet (endret)

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

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...