beidermachtvongreyscull
Goto Top

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:

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
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

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

beidermachtvongreyscull
beidermachtvongreyscull 31.05.2021 um 14:44:55 Uhr
Goto Top
1
2
3
strFileExtension = Right(strFileName, CInt(Len(strFileName) - intDotPos))
				'strZielordner = strZielordner & Left(strFileName, 3) & "-" & rconvletter & r & Right(strFileName, CInt(Len(strFileName) - intDotPos +1))  
				strZielordner = strZielordner & Left(strFileName, 3) & "-" & rconvletter & r & strFileExtension  

Ich hab's so gelöst.
Nicht schön, aber scheint zu funktionieren.
148121
Lösung 148121 31.05.2021 aktualisiert um 15:44:25 Uhr
Goto Top
Dateiextension, Pfade, Basename etc. bekommst du schöner mit dem Filesystemobject so
1
2
set fso = CreateObject("Scripting.FileSystemObject")  
strFileExtension = fso.GetExtensionName(strFileName)
und Pfade setzt man am schönsten mittels BuildPath zusammen.

Gruß w.
beidermachtvongreyscull
beidermachtvongreyscull 31.05.2021 um 17:15:58 Uhr
Goto Top
Hab vielen Dank!

Du hast natürlich Recht.
Ich baue das ins Script ein.

VG
bdmvg
148121
148121 31.05.2021 aktualisiert um 17:20:53 Uhr
Goto Top
Keine Ursache.
Zitat von @beidermachtvongreyscull:
Du hast natürlich Recht.
Sag das mal meiner besseren Hälfte, da erzählt die dir was face-big-smile.
148656
148656 31.05.2021 um 17:30:12 Uhr
Goto Top
hiermit besänftig man jede bessere Hälfte face-smile
Hilft auch beim Chef face-smile
g.5930583.161429.1246354441
148121
148121 31.05.2021 aktualisiert um 17:55:29 Uhr
Goto Top
Wie wahr 😂
beidermachtvongreyscull
beidermachtvongreyscull 01.06.2021 aktualisiert um 12:49:06 Uhr
Goto Top
Ich bin nicht verheiratet.
Dadurch musste ich dieses Privileg nicht abtreten und kann frei darüber verfügen. face-big-smile
beidermachtvongreyscull
beidermachtvongreyscull 01.06.2021 um 12:49:33 Uhr
Goto Top
Einfach herrlich. face-big-smile
Vielen Dank dafür!
148656
148656 01.06.2021 um 12:50:05 Uhr
Goto Top
dann hast du also einen festen Händedruck? face-wink