Desktopverknüfung autom. erstellen - Erweiterung

Hallo!

Ich nutze seit einigen Monaten ein kleines Script um autom. eine Verknüpfung auf dem Desktop anzulegen. Das klappt auch alles super - meistens. Davor steht ein Kopierprozess (über einen Dos-Befehl) der leider in 1 von 18 Starts die Daten nicht korrekt über das Netzwerk kopiert. Ich glaube aber, dass an diesem Befehl nichts falsch ist:

CODE
net use E: \server\order /USER:User passw /Persistent:No
xcopy „E:“ „D:\Daten_Aktuell“ /Y /V

Nun tritt aber das Problem auf, dass in diesem einen Fall bei dem das Kopieren nicht einwandfrei funktioniert die Mitarbeiter unbemerkt mit einem alten Datensatz arbeiten.

Um Ihnen aber deutlich zu machen, dass Sie noch den alten oder schon den neuen Datensatz als Verknüpfung auf Ihrem Desktop haben wollte ich einfach jedesmal bei einer Änderung auch das Desktopsymbol ändern. Das klappt aber nicht so wie ich möchte:

’ AB HIER WIRD DIE VERKNÜPFUNG AUF DEM DESKTOP ERSTELLT
Set Shell = CreateObject(„WScript.Shell“)
DesktopPath = Shell.SpecialFolders(„Desktop“)
Set link = Shell.CreateShortcut(DesktopPath & „\DATEN.lnk“)
link.Arguments = sVariable
link.Description = „Aktuell“
link.HotKey = „CTRL+ALT+S“
link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, 22“
link.TargetPath = „D:\Daten_Aktuell\db.exe“
link.WindowStyle = 3
link.WorkingDirectory = „D:\Daten_Aktuell“
link.Save

Soweit so gut. Das klappt auch alles einwandfrei. Nun wollte ich aber folgende Zeile hinzufügen und eine zweite anpassen:

iconvar = „22“
ALT link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, 22“
NEU link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, iconvar“

Leider zerschießt mir diese Änderung mein Desktopicon.
Was mache ich falsch?

Gruß
Lars

Hallo,

iconvar = „22“
ALT link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, 22“
NEU link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, iconvar“

Leider zerschießt mir diese Änderung mein Desktopicon.
Was mache ich falsch?

ohne den code völlig zu verstehen, da ist ein Syntaxfehler.
Du meinst:

NEU link.IconLocation = "%SystemRoot%\system32\SHELL32.dll, " & iconvar

Gruß Rainer

Danke :smile:
Ah, danke!
Das & hatte ich doch glatt vergessen - Da sieht man manchmal den Wald vor lauter Bäumen nicht :smile:

Vielen Danke nochmal!

Gruß
Lars

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich nutze seit einigen Monaten ein kleines Script um autom.
eine Verknüpfung auf dem Desktop anzulegen. Das klappt auch
alles super - meistens. Davor steht ein Kopierprozess (über
einen Dos-Befehl) der leider in 1 von 18 Starts die Daten
nicht korrekt über das Netzwerk kopiert. Ich glaube aber, dass
an diesem Befehl nichts falsch ist:

CODE
net use E: \server\order /USER:User passw /Persistent:No
xcopy „E:“ „D:\Daten_Aktuell“ /Y /V

Hi Lars,

sieht man in der x.txt etwas besonderes wenn das Kopieren schiefging bei:

xcopy „E:“ „D:\Daten_Aktuell“ /Y /V >> x.txt

Help net brachte nix und net /? nahezu nix, deshalb kann ich zum Net-befehl nix sagen.

Und weiß auch nicht ob das was bringt:

net use E: \server\order /USER:User passw /Persistent:No >> x.txt
xcopy „E:“ „D:\Daten_Aktuell“ /Y /V >> x.txt

Sind vielleicht gelegentlich paar Dateien geöffnet wenn sie kopiert werden sollen?

Wieso benutzt du eine Batch und benutzt nicht shell oder shellexecute in VB?

Bringt dies was in der batch :

fc E:*.* D:\Daten_Aktuell*.* >> x.txt

Gruß
Reinhard

Nun tritt aber das Problem auf, dass in diesem einen Fall bei
dem das Kopieren nicht einwandfrei funktioniert die
Mitarbeiter unbemerkt mit einem alten Datensatz arbeiten.

Um Ihnen aber deutlich zu machen, dass Sie noch den alten oder
schon den neuen Datensatz als Verknüpfung auf Ihrem Desktop
haben wollte ich einfach jedesmal bei einer Änderung auch das
Desktopsymbol ändern. Das klappt aber nicht so wie ich möchte:

’ AB HIER WIRD DIE VERKNÜPFUNG AUF DEM DESKTOP ERSTELLT
Set Shell = CreateObject(„WScript.Shell“)
DesktopPath = Shell.SpecialFolders(„Desktop“)
Set link = Shell.CreateShortcut(DesktopPath & „\DATEN.lnk“)
link.Arguments = sVariable
link.Description = „Aktuell“
link.HotKey = „CTRL+ALT+S“
link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, 22“
link.TargetPath = „D:\Daten_Aktuell\db.exe“
link.WindowStyle = 3
link.WorkingDirectory = „D:\Daten_Aktuell“
link.Save

Soweit so gut. Das klappt auch alles einwandfrei. Nun wollte
ich aber folgende Zeile hinzufügen und eine zweite anpassen:

iconvar = „22“
ALT link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, 22“
NEU link.IconLocation = „%SystemRoot%\system32\SHELL32.dll, iconvar“

Leider zerschießt mir diese Änderung mein Desktopicon.
Was mache ich falsch?

Gruß
Lars

Hallo Reinhard,

Wieso benutzt du eine Batch und benutzt nicht shell oder
shellexecute in VB?

? Wenn VB, wozu dann Shell? Filecopy reicht doch.

Gruß Rainer

Hi Lars,

sieht man in der x.txt etwas besonderes wenn das Kopieren
schiefging bei:

xcopy „E:“ „D:\Daten_Aktuell“ /Y /V >> x.txt

Leider nichts sinnvolles.

Help net brachte nix und net /? nahezu nix, deshalb kann ich
zum Net-befehl nix sagen.

Und weiß auch nicht ob das was bringt:

net use E: \server\order /USER:User passw /Persistent:No
>> x.txt
xcopy „E:“ „D:\Daten_Aktuell“ /Y /V >> x.txt

Naja. net use benötige ich um den netzwerkpfad zu erstellen. Der „normale Benuzer“ hat sonst keine Rechte auf diesen Ordner zu connecten.

Sind vielleicht gelegentlich paar Dateien geöffnet wenn sie
kopiert werden sollen?

Nie.

Wieso benutzt du eine Batch und benutzt nicht shell oder
shellexecute in VB?

Weil ich das nicht kann? Ich habe keine Ahnung von VB. Wenn das nicht so schwierig ist bin ich für jede Idee offen :smile:

Bringt dies was in der batch :

fc E:*.* D:\Daten_Aktuell*.* >> x.txt

Was macht der Befehl?

Gruß
Lars

Hallo Lars,

OK, nachdem das geklärt ist … warum doktorst Du an den Symptomen herum?

Du kannst die Dateien doch mit VB kopieren und hast Kontrolle darüber, ob die Dateien kopiert wurden.

Gruß Rainer

Hallo,

Ich habe keine Ahnung von VB. Wenn
das nicht so schwierig ist bin ich für jede Idee offen :smile:

dann hast Du die falsche Frage gestellt. :smile:

Kopiere am Besten mit ‚CopyFileEx‘, dann bekommst Du eine Rückmeldung, ob der Kopiervorgang erfolgreich war und kannst Notfalls wiederholen.

'in a form (Form1)
Private Sub Form\_Load()
 'KPD-Team 2001
 'URL: http://www.allapi.net/
 'E-Mail: [email protected]
 Dim Ret As Long
 'set the graphics mode to persistent
 Me.AutoRedraw = True
 'print some text
 Me.Print "Click the form to abort the filecopy"
 'show the form
 Me.Show
 'start copying
 Ret = CopyFileEx("c:\verybigfile.ext", "c:\copy.ext", AddressOf CopyProgressRoutine, ByVal 0&, bCancel, COPY\_FILE\_RESTARTABLE)
 'show some text
 Me.Print "Filecopy completed " + IIf(Ret = 0, "(ERROR/ABORTED)", "successfully")
End Sub
Private Sub Form\_Click()
 'cancel filecopy
 bCancel = 1
End Sub
'in a module
Public Const PROGRESS\_CANCEL = 1
Public Const PROGRESS\_CONTINUE = 0
Public Const PROGRESS\_QUIET = 3
Public Const PROGRESS\_STOP = 2
Public Const COPY\_FILE\_FAIL\_IF\_EXISTS = &H1
Public Const COPY\_FILE\_RESTARTABLE = &H2
Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long
Public bCancel As Long
Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, ByVal TotalBytesTransferred As Currency, ByVal StreamSize As Currency, ByVal StreamBytesTransferred As Currency, ByVal dwStreamNumber As Long, ByVal dwCallbackReason As Long, ByVal hSourceFile As Long, ByVal hDestinationFile As Long, ByVal lpData As Long) As Long
 'adjust the caption
 Form1.Caption = CStr(Int((TotalBytesTransferred \* 10000) / (TotalFileSize \* 10000) \* 100)) + "% complete..."
 'allow user input
 DoEvents
 'continue filecopy
 CopyProgressRoutine = PROGRESS\_CONTINUE
End Function

Und Neztlaufwerk verbinden/trennen …
http://www.activevb.de/tipps/vb6tipps/tipp0010.html

Gruß Rainer

Coole Sache :smile:

Vielen Dank.
Das werde ich am WE gleich mal testen.

Viele Grüße
Lars