retz12
Goto Top

VBS Probleme

Werte Programmierer,
Ich bin nicht so der ober Programmierer, deshalb stehe ich diesmal wieder mal auf der Leitung!
Ich möchte mit dem Script überprüfen, ob eine gewisse Datei (%username%.htm) in einem gewissen Laufwerk vorhanden ist.
Wenn die Datei vorhanden ist, dann soll überprüft werden, ob ein gewisser Ordner vorhanden ist, wenn dieser vorhanden ist, dann soll er die gefundene Datei (%username%.htm) in diesen Ordner kopieren, wenn der Ordner nicht vorhanden ist, dann den Ordner (test) erstellen und dann wieder die Datei in den Ordner Test kopieren!
Leider schaffe ich es nicht das in ein vernünftiges Script zu packen.

Anbei mein Script

' *** Initialze objects ***  
Set WSHShell = WScript.CreateObject("WScript.Shell")  
Set fs = CreateObject("Scripting.filesystemobject")  

' *** aktualisieren ***  
	If fs.Fileexists(wshshell.ExpandEnvironmentStrings("D:\%username%.htm")) goto :copy  
	End If
:copy	
	If fs.Folderxists(wshshell.ExpandEnvironmentStrings("D:\test")) = true then  
		fs.CopyFile wshshell.ExpandEnvironmentStrings("D:\%username%.htm"), wshshell.ExpandEnvironmentStrings("D:\test\%username%.htm")  
	else
		fs.CreateFolder wshshell.ExpandEnvironmentStrings("D:\test")  
		fs.CopyFile wshshell.ExpandEnvironmentStrings("D:\%username%.htm"), wshshell.ExpandEnvironmentStrings("D:\test\%username%.htm")  
	End If
	End If

Content-ID: 166888

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

Ausgedruckt am: 14.11.2024 um 19:11 Uhr

MrTrebron
MrTrebron 25.05.2011 um 13:54:54 Uhr
Goto Top
Hi

probier mal
' *** Initialze objects ***  
Set WSHShell = WScript.CreateObject("WScript.Shell")  
Set fs = CreateObject("Scripting.filesystemobject")  

' *** aktualisieren ***  
	If fs.Fileexists(wshshell.ExpandEnvironmentStrings("D:\%username%.htm")) Then  
			If fs.Folderexists("D:\test") = true then  
			fs.CopyFile wshshell.ExpandEnvironmentStrings("D:\%username%.htm"), wshshell.ExpandEnvironmentStrings("D:\test\%username%.htm")  
		Else
			fs.CreateFolder wshshell.ExpandEnvironmentStrings("D:\test")  
			fs.CopyFile wshshell.ExpandEnvironmentStrings("D:\%username%.htm"), wshshell.ExpandEnvironmentStrings("D:\test\%username%.htm")  
		End If
	End If

Gruß
Norbert
retz12
retz12 25.05.2011 um 14:28:01 Uhr
Goto Top
Hi,
Danke für die rasche Rückmeldung.
Es funktioniert wirklich - Vielen Dank

sieht eigentlich eh ganz einfach aus, nur bin ich nicht darauf gekommen, wie ich es lösen könnte.

Danke nochmal
retz12
retz12 27.05.2011 um 17:00:44 Uhr
Goto Top
Ich bin heute auf ein Problem gekommen!!
Es wird nämlich beim 2.mal aufrufen der Datei eine Fehlermeldung ausgegeben, dass es die Datei schon einmal gibt.
Fehler tritt auf in Zeile 11 im oberen Script!!
Woran kann das liegen.

So wie es aussieht probiert er den Ordner nochmals anzulegen, jedoch ist dieser schon vorhanden.

Ich würde nochmal um deine / Eure hilfe ersuchen.
Danke
MrTrebron
MrTrebron 27.05.2011 um 17:13:05 Uhr
Goto Top
Hi

ich kann den Fehler nicht Nachstellen.

Hast du noch was im Script verändert?

Gruß
Norbert
retz12
retz12 27.05.2011 um 17:23:32 Uhr
Goto Top
Nein habe ich nicht.
Ich habe nur die Pfade geändert, da es im Netzwerk läuft und bei jedem Anmelden die Datei überschrieben werden soll.
Die Datei wird von einem freigegebenen Netzlaufwerk ins lokale Userverzeichnis kopiert!
Der Fehler tritt auf, wenn der Ordner schon vorhanden ist! Auch wenn ich die Dabei im Ordner lösche, kommt der Fehler.
Wenn ich den Ordner lösche, dann funktioniert es wieder.
Keine Ahnung, warum das nicht funktionert.

Bei mir lokal zu hause nicht im Netzwerk funktioniert das einwandfrei.
bastla
bastla 27.05.2011 um 17:28:22 Uhr
Goto Top
Hallo retz12 und MrTrebron!

Eine etwas wartungsfreundlichere Variante - vielleicht geht's ja damit face-wink:
' *** Initialze objects ***  
Set WSHShell = WScript.CreateObject("WScript.Shell")  
Set fs = CreateObject("Scripting.filesystemobject")  

SourceFile = WSHShell.ExpandEnvironmentStrings("D:\%username%.htm")  
TargetFolder = "D:\test\"  

' *** aktualisieren ***  
If Right(TargetFolder, 1) <> "\" Then TargetFolder = TargetFolder & "\"  
If fs.FileExists(SourceFile) Then
    If Not fs.FolderExists(TargetFolder) Then fs.CreateFolder TargetFolder
    fs.CopyFile SourceFile, TargetFolder
End If
Grüße
bastla
retz12
retz12 27.05.2011 um 17:49:01 Uhr
Goto Top
Irgendwo ist in diesem Script auch noch ein Fehler

zeile 11
Char 47

Pfad nicht gefunden.


Genau genommen möchte ich folgenden Order erstellen, bzw. die Datei in den Ordner kopieren
C:\Users\%username%\AppData\Roaming\Microsoft\Signatures

Jedoch lässt er mir das nur einmal zu. Beim überschreiben kommt dann die Fehlermeldung!
bastla
bastla 27.05.2011 um 20:57:09 Uhr
Goto Top
Hallo retz12!

Vorweg: Für den genannten Pfad sollte die Zeile 6
TargetFolder = WSHShell.ExpandEnvironmentStrings("%appdata%\Microsoft\Signatures")
lauten.
Nachvollziehbar wäre noch, wenn es den Ordner "Microsoft" nicht gäbe - dann würde tatsächlich der "Pfad nicht gefunden", allerdings müsste es den Fehler dann bereits beim erstmaligen (und jedem weiteren) Lauf des Scripts geben ...

Vorbeugen ließe sich dem etwa so:
Set WSHShell = WScript.CreateObject("WScript.Shell")  
Set fs = CreateObject("Scripting.filesystemobject")  

PathParts = Split(WSHShell.ExpandEnvironmentStrings("%appdata%\Microsoft\Signatures"), "\")  

TargetPath = PathParts(0) & "\"  
For i = 1 To UBound(PathParts)
    TargetPath = TargetPath & PathParts(i) & "\"  
    If Not fs.FolderExists(TargetPath) Then fs.CreateFolder TargetPath
Next
Grüße
bastla
retz12
retz12 29.05.2011 um 10:05:35 Uhr
Goto Top
Hallo bastla,

Danke für die Hilfe beim Programmieren!!

Ich habs jetzt es fehlte nur der Zusatz "WSHShell.ExpandEnvironmentStrings" in der Zeile 6
Was bewirkt dieser Teil eigentlich?


Aber danke nochmal
bastla
bastla 29.05.2011 um 10:13:26 Uhr
Goto Top
Hallo retz12!
Was bewirkt dieser Teil eigentlich?
Damit wird der Inhalt einer CMD-Systemvariablen (wie zB "%temp%" oder "%windir%) ausgelesen - für den Pfad "D:\test" wäre das nicht erforderlich, für einen Pfad unterhalb von "%appdata%" natürlich sehr wohl ...

Grüße
bastla