23. marts 2004 - 08:42Der er
13 kommentarer og 1 løsning
DOS program til rename funktion
Jeg har et lille program som omdøber nogle filer, det ser ud som følger. Mit problem er at jeg skal køre programmet 5 gange, og samtidig ændre hver gang , da mine filer indeholder tallet 1, 2 3, 4, eller 5. Kan jeg ikke lave en løkke så jeg bare kan køre programmet 1 gang, jeg er ret pas på DOS programmering, mit filnavn varierer noget i længde, så derfor ? tegnet, kan jeg lave det anderledes ved hjælp af et andet jokertegn.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Jeg står i stifinder, og afvikler så mit program Omdøbe.CMD, som herefter løber filerne igennem i det pågældende directory. Disse bliver omdøbt efter ovenstående system. Herefter må jeg ind og ændre 1 tallet til et 2 tal, gemme programmet, og så køre det en gang til, og så fremdeles med tallet 3, 4 og 5. Så det er lidt omstændeligt. Jeg ville gerne kunne køre programmet af en gang, altså noget med en løkke (for next). Håber det nok forklaring. Et VB script lyder interessant.
Så en fil ender med at have et navn af form 1.dat, 1.par, 2.dat,... Har jeg forstået dig ret. Prøv at give en række eksempler på konkrete filnavne og fortæl, hvad de skal ende med at hedde.
Nej Tallet vil maksimalt være 9, altså AB.00009.dat.txt. Det er kun det sidste ciffer der kan svinge fra 1-9, i det tilfælde jeg har nævnt svinger det fra 1 til 5, og der er altid fire nuller foran.
Nå, jeg fik alligevel tid til at se på det nu. Nedenstående VBscript skal du gemme i det katalog, hvor du har de filer, du skal have omdøbt, liggende. Gem det ved f.eks. at bruge Notepad.exe. Du kan give det navnet rename.vbs.
Når du så klikker på ikonen, skulle dine filer gerne blive omdøbt. Jeg har ikke gjort noget for at se på om der skulle være store bogstaver nogle steder. Hvis en fil hedder AB.00001.dat.Txt vil den ikke blive omdøbt.
Option Explicit
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject") Dim N
Sub Main Dim CurrentFolder: Set CurrentFolder = fso.GetFolder(".") NewFileNames CurrentFolder End Sub
Sub NewFilenames (ByVal Folder) Dim Files: Set Files = Folder.Files Dim File, Name For Each File In Files Name=File.name If Instr(Name,".0000")>0 Then Name=Replace(Name,".0000","") Name=Replace(Name,".txt","") File.Move Name N=N+1 End If Next End Sub
Mon ikke det er fordi, der står f.eks. AB.00001.Txt? Hvis der står ABC.00001.txt skulle det virke. Jeg valgte ikke at bkymre mig om dette. En hurtig løsning er at sørge for at alt er med små bogstaver. Men så vil AB.00001.txt blive til ab1.txt. Hvis det ikke gør noget, skal du blot i scriptet ændre ordren Name=File.name til Name=Lcase(File.name)
Men alt kan lade sig gøre. Du skal blot sige til. :o)
Du har ret i originalfilerne står der: Filnavn.Dat.Txt beklager. Jeg har tilføjet din sidste linie, og nu kører det, det eneste er at så bliver originalfilnavnet med småt, men det er OK
En hurtig løsning er så at lave det om til lutter store bogstaver. Sådan f.eks. Proceduren NewFileName bliver så til:
Sub NewFilenames (ByVal Folder) Dim Files: Set Files = Folder.Files Dim File, Name For Each File In Files Name=Ucase(File.name) If Instr(Name,".0000")>0 Then Name=Replace(Name,".0000","") Name=Replace(Name,".TXT","") File.Move Name N=N+1 End If Next End Sub
Hvis du vil have det til at ende med AB1.dat eller AB1.par skal der ændres en lille smule mere. Du skal bare sige til.
Det kunne f.eks. være Sub NewFilenames (ByVal Folder) Dim Files: Set Files = Folder.Files Dim File, Name For Each File In Files Name=Ucase(File.name) If Instr(Name,".0000")>0 Then Name=Replace(Name,".0000","") Name=Replace(Name,".TXT","") Name=Replace(Name,"DAT","dat") Name=Replace(Name,"PAR","par") File.Move Name N=N+1 End If Next End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
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.