kjeklulf Skrevet 14. juni 2007 Del Skrevet 14. juni 2007 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
Garanti Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 Med litt avansert batch-programmering skal vel dette gå an, men det blir verre dersom det ikke er snakk om et engangstilfelle... Lenke til kommentar
Frysning Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 Batch, Python, VB.NET, enklere språk.... Så har du dette implementert i løpet av kort tid. Lenke til kommentar
kjeklulf Skrevet 15. juni 2007 Forfatter Del Skrevet 15. juni 2007 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. Lenke til kommentar
Frysning Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 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?) Lenke til kommentar
GeirGrusom Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 (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 15. juni 2007 av GeirGrusom Lenke til kommentar
kjeklulf Skrevet 15. juni 2007 Forfatter Del Skrevet 15. juni 2007 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
blacktower Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 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
GeirGrusom Skrevet 15. juni 2007 Del Skrevet 15. juni 2007 (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 15. juni 2007 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå