14. marts 2000 - 22:15Der er
9 kommentarer og 1 løsning
Batch renaming af filer
Hejsa kode gutter.
Ja, meget mod min vilje må jeg krybe til korset og forhøre mig om der er nogen der vil hjælpe med med at lave et meget lille program for en bunke point?
Det jeg mangler er et program der kan tage en række filer i et bibliotek og rename dem fortløbende (dvs. 1.xxx, 2.xxx osv) Problemet er at det skal bruges til billeder til et slideshow hvilket derfor er vigtigt at jeg fra gang til gang kan definere hvad endelsen skal være på filerne.
Den skal operere på alle filer i biblioteket og skal starte med at rename i den rækkefølge som filerne ville blive listet i når de sorteres alfabetisk.
Hvis du vil hjælpe skal du være velkommen til at kontakte mig på oscar@gensmann.dk hvis der er noget du er i tvivl om :-)
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Programmet virker ved, at du vælger et dir - de filer, der bliver renamed bliver så vist i filboksen til højre. Klik >Start<, og filerne bliver renamet med fortløbende numre i alfabetisk rækkefølge.
Jeg ved godt at det ikke lige var hvad du bad om, men jeg blev sq lige så stolt af mig selv over at jeg kunne lave det på 40 linier vbs kode. Så hvis du kunne tænke dig et kommandointerface til din mini applikation så kopier nedenstående linier og smid dem i en fil - fx. myREN.vbs - og skriv 'cscript myREN.vbs D:\Temp ext', altså først biblioteket og dernæst den nye extension. Den er udviklet på en W2K server, så det er muligt at den ikke vil køre i dit miljø, men så glem det eller vend tilbage .... Du kan selvfølgelig nemt selv implementere min kode i vb, det ligner jo hinanden :-)
Mvh
function Usage() Wscript.Echo "Skriv først biblioteknavnet og dernæst den nye extension uden punktum" Wscript.Echo "Fx. myren.vbs D:\Temp ext" end function
Set objArgs = WScript.Arguments if (objArgs.count <> 2) then Call Usage wscript.Quit(-1) end if
Følgende skulle kunne kopieres ind i et modul. Men pas på! Rutinen kan lave forfærdelige ulykker hvis den bruges i et forkert dir! Sorteringsrutine har jeg lånt fra VB source code library.
Sub SkiftFilnavne() Dim Fil As String Dim Filsti As String Dim strFiler() As Variant Dim strSorteredeFiler As Variant Dim strEfternavn As String Dim i As Integer Filsti = InputBox("Indtast sti") If Right(Filsti, Len(Filsti)) <> "\" Then Filsti = Filsti & "\" strEfternavn = InputBox("Indtast efternavn (.xxx)") Fil = Dir(Filsti, vbNormal) Do While Fil <> "" ' find filnavne ReDim Preserve strFiler(i) strFiler(i) = Fil Fil = Dir() i = i + 1 Loop If i = 0 Then Exit Sub strSorteredeFiler = InsertSort(strFiler) 'sorter
For i = 0 To UBound(strFiler) FileCopy Filsti & strFiler(i), Filsti & i + 1 & "." & strEfternavn Kill Filsti & strFiler(i) Next i End Sub
'Name: InsertSort ' ' Description: ' Sorts a single dimensional array in ascending or descending order using ' the Insert Sorting method. ' Function InsertSort(ValueList As Variant, Optional SortDescending As Integer) As Variant
Dim RipVal As Variant Dim RipOrdinal As Long Dim RipDescent As Long Dim PrivateBuffer As Variant Dim Placed As Boolean Dim x As Long Dim y As Long
PrivateBuffer = ValueList
'Ok, we start at the second position in the array and go 'from there
RipOrdinal = 1 RipDescent = 1
For y = 1 To UBound(PrivateBuffer) RipVal = PrivateBuffer(y) If y <> 1 Then RipDescent = y Do Until Placed If IIf(SortDescending, (PrivateBuffer(RipDescent - 1) <= RipVal), _ (PrivateBuffer(RipDescent - 1) >= RipVal)) Then
RipDescent = RipDescent - 1 If RipDescent = 0 Then For x = y To RipDescent Step -1 If x = 0 Then Exit For PrivateBuffer(x) = PrivateBuffer(x - 1) Next x PrivateBuffer(RipDescent) = RipVal Placed = True End If Else 'shift the array to the right For x = y To RipDescent Step -1 If x = 0 Then Exit For PrivateBuffer(x) = PrivateBuffer(x - 1) Next x 'insert the ripped value PrivateBuffer(RipDescent) = RipVal Placed = True End If Loop Placed = False Next y
'return the sorted array InsertSort = PrivateBuffer
Hejsa gutter jeg er meget glad for den utrolig hurtige respons :-)
Desværre ligger landet således at mit problem er at jeg ikke er programmør, men grafiker, har dog en smule forstand på vb og asp :-) Så derfor går mit spørgsmål lidt ud på at få en færdig kompileret mini applikation ,som jeg så kan bruge.
Det er osse derfor jeg skriver at det er mod min vilje at jeg spørge efter arbejdskraft for point, da jeg selv har den holdning at man ikke bør forære sit arbejde væk og det er jo lidt det man gør da point måske ikke lige er den hårdeste valuta :-)
men tak for de gode forslag og om ikke andet kan de forhåbenlig komme en anden til gode her i gruppen :-)
Driis> jeg kigger lige nærmere på det program når jeg er færdig med at hente mailen ned :-)
hehe okay du får rekorden, men sådan en programmeringsnød som mig, skal helst have det serveret i en typisk ms vindues applikation, får jeg kan finde ud af det :-) så skidt med det fylder lidt mere, men okay du får lov til at have recorden så, men poitene gik nu alligevel til Driis fordi han var den første og fordi han kompilerede det i et lækkert lille windows program jeg kunne finde ud af *hehe* - men som sagt tidligere er jeg utrolig glad for den hurtigere respons I alle har givet :-) det vil jeg huske til næste gang jeg skal have lavet et lille program *hæhæ*
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.