VBScript: Umbenennen von Dateiendungen

amn.ssy

Erfahrenes Mitglied
Hallo,

ich hänge den Vormittag an folgendem Problem fest ohne wirklich weiter zu kommen.
Mit dem foldenden Scrip kopiere ich 2 Dateien in 2 unterschiedliche Verzeichnisse.
Sofern die Datei bereits vorhanden ist soll Sie in .org umbenannt werden anschließend wird die neue kopiert.
Bis dahin funktioniert das ganz wie es soll.
Nun möchte ich das Script ggf. auch für Updates benutzen können, d.h. in diesem Fall existiert bereits die "neue" Datei und eine .org!
Ich würde gerne erreichen, daß in diesem Fall die ORG-Datei unangetastet bleibt und die noch aktuelle Datei in .lst oder noch besser in .001 usw. umbenannt wird.
Visual Basic:
'*** Const for destination directory and source files ***
const sPathOTM = "\AppData\Roaming\Microsoft\Outlook\"
const sFileOTM = "VbaProject.OTM"
const sPathNSet = "\AppData\Local\Microsoft\Office\"
const sPathISet = "\AppData\Roaming\Microsoft\Office\"
const sFileUI = "olkexplorer.officeUI"
'********************************************************

dim oFSO
dim oSHELL
dim sInstPath
dim sUser
dim sPathOTMcpl
dim sPathNSetcpl
dim sPathISetcpl
dim oFile_new

set oFSO = CreateObject("Scripting.FileSystemObject")
set oShell =  CreateObject("WScript.Shell")

'*** find actual source- and user path
sInstPath = oFSO.GetParentFolderName(WScript.ScriptFullName) & "\Install\"
sUser = oSHELL.ExpandEnvironmentStrings("%USERPROFILE%")

'*** create destination path
sPathOTMcpl = sUser & sPathOTM
sPathNSetcpl = sUser & sPathNSet
sPathISetcpl = sUser & sPathISet

'*** check if .OTM (Macro) and .officeUI (menu) already exist
'*** cancel installation by click "No" otherwise 
'*** rename exist OTM and .officeUI file to .old and copy new files
if oFSO.FileExists (sPathOTMcpl & sFileOTM) then

  if MsgBox ("An OTM file (Outlook Macro) already exists at" & vbcrlf & vbcrlf & _
            sPathOTMcpl & vbcrlf & vbcrlf & _
            "Would you continue the installation?" & vbcrlf & _
            "In this case, the existing files (Macro & Menu) will renamed to *.old.", _
     vbYesNo, "File already exists!") = vbNo then
            
  Set oShell = nothing          
  Set oFSO = nothing 
  WScript.Quit
  
  end if
  
  set oFile_new = oFSO.GetFile(sPathOTMcpl & sFileOTM)
  
    if  LCase(oFSO.GetExtensionName(oFile_new)) = "org" Then
      oFile_new.name = sFileOTM & ".lst"
    else
      oFile_new.name = sFileOTM & ".org"
    end if
    
else

  oFSO.copyfile sInstPath & sFileOTM, sPathOTMcpl
  
end if

  
if oFSO.FileExists (sPathNSetcpl & sFileUI) then

  set oFile_new = oFSO.GetFile(sPathNSetcpl & sFileUI)
  oFile_new.name = sFileUI & ".org"
  oFSO.copyfile sInstPath & sFileUI, sPathNSetcpl
  
elseif oFSO.FileExists (sPathISetcpl & sFileUI) then

  set oFile_new = oFSO.GetFile(sPathISetcpl & sFileUI)
  oFile_new.name = sFileUI & ".org"
  oFSO.copyfile sInstPath & sFileUI, sPathISetcpl
  
else

  oFSO.copyfile sInstPath & sFileUI, sPathNSetcpl
  
end if

MsgBox "The macro and menu customization was successfully installed" & vbcrlf & _
       "To use the macro, please open your outlook and enable it once with ALT-F11.", _
        vbYes, "Installation complete"

Set oShell = nothing          
Set oFSO = nothing 
WScript.Quit

Hab es für erste u.a. mal versucht wie in Zeile 49 ff, leider ohne den gewünschten Erfolg.
Wenn ich erstmal einen Ansatz habe, dann wäre das ja auch einfach auf die Zeilen 63 ff übertragbar.

LG
opiwahn
 
Zuletzt bearbeitet:
1. Schritt: Erstinstallation (Ordner sind leer) --> kopiere die gleiche Datei zweimal hinein, benenne eine mit Endung OTM, die andere von Anfang an in ORG
2. Schritt: Updates (Ordner sind nicht leer, eine OTM und eine ORG existieren bereits, siehe Schritt 1) --> Prüfe nur auf die Datei-Endung OTM, Falls sie existiert, benenne um in LST oder 001, und kopiere neue OTM hinein
 
Inwiefern blieb Z 49.ff erfolglos?

Das Kopieren und Anhängen der Dateiendung funktioniert wie angegeben bei mir. Ich sehe nur folgende Probleme:
- Nach dem Anhängen von .org kopierst du die Datei nicht noch einmal
- Du hängst .org an anstatt diese umzubenennen. Das liegt bereits an der Konstante. Vielleicht verwendest du besser bei der Konstante nicht die Endung, sondern nur den eigentlichen Dateinamen.
- Ich würde tatsächlich zu 0001 raten anstatt 1st. So kannst du dir releativ einfach die Endung mit CInt Parsen, Inkrementieren und anschließend für die Umbenennung verwenden.
 
Hallo,

jetzt hab ihr mich aber ganz aus'm Schritt gebracht - oder ich habe mich in der Problembeschreibung etwas dusselig ausgedrückt:
Wie unschwer zu erkennen ist möchte ich auf diesem Weg ein Outlook-Makro und die Menüeinstellungen verteilen, da um aus dem Ganzen ein Add-In zu machen mir jegliche Erfahrung fehlt.
Der ersten Schritt, wenn das Marko zu ersten mal verteilt wird, funktioniert ja soweit.
Das Anhängen von ORG an die ggf. vorhandene Datei habe ich rein aus Vorsicht gewählt.
Wenn der User evtl. schon ein Makro am Laufen hat oder seine Menüleiste persönlich eingestellt ist, wäre das ziemlich doof wenn mit dem Übertragen alles verloren ginge.
Daher möchte ich hier wenigstens für ein rudimentäres Backup sorgen.
Diese ...ORG-Dateien sollen auch für die Zukunft unangetastet sso im jeweiligen Ordner liegen bleiben.
Hatte der User noch kein Makro laufen oder seine Menüleiste angepasst ist alles Prima und eine ORG entsteht erst garnicht.
Nun zum Update:
Wenn ich an dem Makro aus den verschiedensten Gründen etwas ändere und dies verteilen möchte, soll die ORG-Datei (soweit vorhanden) unberücksichtigt bleiben.
Nur an der vorhandenen VbaProject.OTM und an die olkexplorer.officeUI soll vor dem kopieren ein 001 ff angehängt werden.
Leider gelingt es mir nicht diese Theorie aus in das Script zu packen.

LG und schönes Wochenende
opiwahn
 
Wie ich schon geschrieben habe: falls der user noch kein makro hat, schieb deine OTM gleich zweimal rein, 1xotm 1xorg
Für updates brauchst du nur auf die dann vorhandene otm testen, dann den ordner auf lst (oder bak) als endung durchschleifen, die erhaltenen dateinamen auf deinen zähler durchparsen, und für die vorhandene otm umbenennen auf neue endung mit neuem zähler im namen.
 
Zurück