staga75
Goto Top

Mit VBS files von rechts kürzen

Hallo zusammen

Als VBS Anfänger bräuchte ich wiedereinmal eure hilfe.

Ich möchte gerne via VBScript mehrere Dateien umbenennen bzw. kürzen. Das ganze sollte in etwa so aussehen:

Files im Ordner c:\temp\

FA1_1974629_7294878_20120207_083102067.cmd
FA1_6774629_9294508_20120207_083102665.cmd
FA1_5574629_3294508_20120207_093102667.cmd
FA1_4474629_4294508_20120207_083102630.xml
FA1_2874629_5294568_20120207_893102633.xml
FA1_1874456_6294508_20120207_663104430.xml
usw.

sollen gekürzt werden auf:

FA1_1974629_7294878.cmd
FA1_6774629_9294508.cmd
FA1_5574629_3294508.cmd
FA1_4474629_4294508.xml
FA1_2874629_5294568.xml
FA1_1874456_6294508.xml

Mit anderen Worten es sollen immer die letzte 19 Zeichen gelöscht werden.

Ich wäre sehr dankbar wenn mir jemand weiterhelfen kann.

Content-Key: 180174

Url: https://administrator.de/contentid/180174

Printed on: April 24, 2024 at 16:04 o'clock

Member: dave84620
dave84620 Feb 07, 2012 at 14:44:23 (UTC)
Goto Top
Hey,
versuchs mal in etwa so...


dim x,y as string
x=dir(ordner.....)
do until x=""
y=left(x,len(x)-23)+right(x,4)
name x as y
x=dir
loop


hat keine Fehlerbehandlung oder sonstwas und keine Garantie, daß es so 1:1 funktioniert... das Wort "ordner" muß natürlich gegen den Ordernamen mit den enthaltenen Dateien getauscht werden

Schöne Grüße
Dave
Member: staga75
staga75 Feb 07, 2012 at 15:11:59 (UTC)
Goto Top
Hi Dave

Danke für die rasche Antwort. Ich es probiert jedoch bricht das Script mit einem Fehler ab welcher die Zeile 5 betrifft. ich habe es folgendermassen angepasst - weiss nicht ob das so richtig ist, wie erwähnt bin ich was VBS betrifft ein absoluter newbi.

Dim x, y
x=dir("C:\tmp")
do until x=""
y=left(x,len(x)-23)+right(x,4)
name x as y
x=dir
loop
Member: dave84620
dave84620 Feb 07, 2012 at 16:03:44 (UTC)
Goto Top
ok, ich habs in VB6 mal ausprobiert....
die Methode "name" benötigt natürlich noch die Pfadangabe.

versuch's mal hiermit:

Dim x, y, p
p="C:\tmp\"
x=dir(p)
do until x=""
y=left(x,len(x)-23)+right(x,4)
name p+x as p+y
x=dir
loop

Schöne Grüße!
Dave
Member: Karo
Karo Feb 07, 2012 at 16:09:31 (UTC)
Goto Top
Hi,

oder so:

( ich definiere es eher als die ersten 19 Zeichen stehen lassen face-wink )

Option Explicit
Dim strPath, FSO, FLD, fil, strOldName, strNewName
strPath = "C:\TMP"  
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set FLD = FSO.GetFolder(strPath)
For Each fil in FLD.Files
   strOldName = fil.Name
   if LEN(strOldName)+4 > 23 then
     strNewName = Left(strOldName,19) & Right(strOldName,4)
     FSO.MoveFile strOldName, strNewName
   end if
Next

bye
Karo
Member: bastla
bastla Feb 07, 2012 at 20:45:13 (UTC)
Goto Top
Hallo @all!

Unter der Annahme, dass es eigentlich darum ginge, aus den 5 durch "_" getrennten Bestandteilen des Dateinamens nur die ersten 3 zu verwenden (was zumindest die Zeichenzählerei spart), könnte das auch so gehen:
Ordner = "c:\temp"  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each File In fso.GetFolder(Ordner).Files
    FileName = fso.GetBaseName(File.Name)
    FileExt = fso.GetExtensionName(File.Name)
    FileParts = Split(FileName, "_")  
    If UBound(FileParts) > 2 Then File.Name = FileParts(0) & "_" & FileParts(1) & "_" & FileParts(2) & "." & FileExt  
Next
Das "If" in Zeile 8 soll verhindern, dass bereits umbenannte Dateien neuerlich bearbeitet werden.

Grüße
bastla
Member: staga75
staga75 Feb 08, 2012 at 06:48:40 (UTC)
Goto Top
hi all

Vielen dank für eure Antworten. Nun habe ich drei Beispiele zur Verfügung welche ich auch bereits getestet habe und einwandfrei funktionieren. Nun habe ich die Qual der Wahl face-wink

Danke nochmals

Gruss
Staga