VBScript - Zufallsdateiname weicht von Erwartung ab
Tach Kollegen,
ich hab ein Problem und brauche einen Augenöffner.
Unseren automatischen Dokumentenfluss steuere ich mit einer ganzen Reihe von Endlos-Scripts in VBScript.
Bei einem kommt es seit einer Änderung zu scheinbar zufälligen Ausgaben, die ich mir nicht gänzlich erklären kann.
Hier erstmal das Script:
Alle Dokumente werden mit dreistelligen Leitnummern im Dateinamen gepräfixt. Salopp macht das Script im ersten Block folgendes:
Zum Phänomen:
Bei bestimmten Ausgangsdateinamen, die das System verarbeiten soll, geht die Umsetzung der Konvention etwas daneben. Ein Dateiname kann zum Beispiel so lauten
103{}{pdf3}{%f%t}{}.tif
Das System sollte folglich so etwas draus machen: 103-BXXXX.tif wobei B ein Buchstabe ist und XXXX eine Zahl zwischen einer und vier Stellen sein kann.
Wenn XXXX kleiner als eine dreistellige Zahl ist, wird interessanterweise folgender Dateiname draus: 103-BXX}.tif.
Und ich verstehe noch nicht, warum. Ich nehme an, dass der Fehler in Zeile 55 liegt, aber er erschließt sich mir nicht.
Der Fehler tangiert den ordnungsgemäßen Ablauf des Dokumentenflusses nicht, aber ich finde ihn unschön und ich finde keine Erklärung dafür, da ich bei Testläufen immer saubere Variablen rausbekomme.
Vielen Dank für jeden sachdienlichen Hinweis im Voraus.
Viele Grüße
bdmvg
ich hab ein Problem und brauche einen Augenöffner.
Unseren automatischen Dokumentenfluss steuere ich mit einer ganzen Reihe von Endlos-Scripts in VBScript.
Bei einem kommt es seit einer Änderung zu scheinbar zufälligen Ausgaben, die ich mir nicht gänzlich erklären kann.
Hier erstmal das Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
On Error resume Next
Set myArgs = WScript.Arguments.Unnamed
numFileCount = myArgs.item(0)
strOutputFile = myArgs.item(1)
function dotFinder(strFile)
Dim strfirstletter
i = 1
Do
strfirstletter = Mid(Right(strFile,i),1,1)
intCompare = StrComp(strfirstletter, ".", vbTextCompare)
If intCompare = 0 Then
dotFinder = Len(strFile) - i
Exit Do
Else
i = i+1
End If
Loop
end function
strQuellordner = "C:\scan-in" & Chr(92)
strZielordner = Chr(92) & Chr(92) & "sc3\c$\in" & Chr(92)
abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
function convert(n)
convert = Mid(abc, n, 1)
end function
Function spaceChecker(strString)
If InStrRev(strString, " ") > 0 Then
spaceChecker = Chr(34) & strString & Chr(34)
Else
spaceChecker = strString
End If
End Function
Do
Set FSO=CreateObject("Scripting.FileSystemObject")
Set fldr= FSO.GetFolder(strQuellordner)
Set Collec_Files= fldr.Files
For Each File in Collec_Files
If Collec_Files.count > 0 then
strFileName = File.Name
strQuelldatei = strQuellordner & strFileName
If FSO.FileExists(strZielordner & strFileName) <> True Then
intDotPos = dotFinder(strFileName)
Randomize
intHighNumber = 26
intLowNumber = 1
rletter = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
rconvletter = convert(rletter)
Randomize
r = Int(Rnd * 100) + 1
strZielordner = strZielordner & Left(strFileName, 3) & "-" & rconvletter & r & Right(strFileName, CInt(Len(strFileName) - intDotPos +1))
Else
End If
FSO.MoveFile strQuelldatei, strZielordner
strZielordner = Chr(92) & Chr(92) & "sc3\c$\in" & Chr(92)
End If
Next
Set objFSo = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSo.GetFolder("\\sc3\c$\out\")
Set colFiles = objFolder.Files
For Each objFile In colFiles
objFile.attributes = 0
Set objFS = CreateObject("Scripting.FileSystemObject")
strMoveQuelle = "\\sc3\c$\out\" & Chr(92) & objFile.Name
strMoveZiel = "C:\scan-out\"
If objFSo.GetFolder("\\sc3\c$\out\").Files.Count >= 1 Then
If objFS.FileExists(strMoveZiel & objFile.Name) <> True Then
objFS.MoveFile strMoveQuelle, strMoveZiel
End If
End if
Set objFS = Nothing
Next
Set objFSo = Nothing
WScript.Sleep 5000
Loop
Alle Dokumente werden mit dreistelligen Leitnummern im Dateinamen gepräfixt. Salopp macht das Script im ersten Block folgendes:
- Finde die Position des ersten Punktes (Dateiname.extension) von rechts (Zeile 47 Trigger für Funktion Zeile 7-20)
- Zeile 55
- Kürze den Dateinamen auf die ersten 3 Zeichen von links
- Ergänze "-"
- Ergänze um einen zufälligen Buchstaben
- Ergänze um einen bis zu vierstelligen Zahlenwert
- Ergänze um die letzen Zeichen des originalen Dateinamens von rechts unter Bedingung "Länge des Dateinamens minus Position des Punktes ganz rechts + 1". Damit sollte der Dateiname in etwa so aussehen: XXX-ZYYYY.ERW
Zum Phänomen:
Bei bestimmten Ausgangsdateinamen, die das System verarbeiten soll, geht die Umsetzung der Konvention etwas daneben. Ein Dateiname kann zum Beispiel so lauten
103{}{pdf3}{%f%t}{}.tif
Das System sollte folglich so etwas draus machen: 103-BXXXX.tif wobei B ein Buchstabe ist und XXXX eine Zahl zwischen einer und vier Stellen sein kann.
Wenn XXXX kleiner als eine dreistellige Zahl ist, wird interessanterweise folgender Dateiname draus: 103-BXX}.tif.
Und ich verstehe noch nicht, warum. Ich nehme an, dass der Fehler in Zeile 55 liegt, aber er erschließt sich mir nicht.
Der Fehler tangiert den ordnungsgemäßen Ablauf des Dokumentenflusses nicht, aber ich finde ihn unschön und ich finde keine Erklärung dafür, da ich bei Testläufen immer saubere Variablen rausbekomme.
Vielen Dank für jeden sachdienlichen Hinweis im Voraus.
Viele Grüße
bdmvg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667199
Url: https://administrator.de/forum/vbscript-zufallsdateiname-weicht-von-erwartung-ab-667199.html
Ausgedruckt am: 09.01.2025 um 06:01 Uhr
9 Kommentare
Neuester Kommentar
Dateiextension, Pfade, Basename etc. bekommst du schöner mit dem Filesystemobject so
und Pfade setzt man am schönsten mittels BuildPath zusammen.
Gruß w.
1
2
2
set fso = CreateObject("Scripting.FileSystemObject")
strFileExtension = fso.GetExtensionName(strFileName)
Gruß w.
Keine Ursache.
Sag das mal meiner besseren Hälfte, da erzählt die dir was .
Sag das mal meiner besseren Hälfte, da erzählt die dir was .
Wie wahr 😂
dann hast du also einen festen Händedruck?