karpitain
Goto Top

VBS oder PoShe Code um in einem Ordner nach einem vorgegebenen Namen plus ".jpg" zu suchen

Hallo liebe User,

ich bin was VBS/PoShe angeht kompletter Neueinsteiger,

hab aber eine für mich sehr umfangreiche Aufgabe.


Ich bekomme von einer Anlage einen integer Wert (vorzeichenloser 16bit Wert) welcher z.B. "16" sein könnte.

Ich möchte dann in einem bestimmten immer gleichbleibenden Ordner nach dem Bild "16.jpg" suchen. Wenn der integer Wert aber 55 sein sollte, soll man Bild "55.jpg" gesucht werden.
Falls dieses Bild vorhanden ist möchte ich das Bild auch gerne aufrufen.
Falls es nicht vorhanden ist, soll sich ein anderes Bild öffnen, in dem steht, dass zu dieser Nummer keine Datei gefunden werden konnte.

Eigentlich habe ich so gut wie Garnichts in meinem Code stehen.

Hat da jemand einen Anstoß wie das möglich wäre umzusetzen?
Vorallem die Definition für den Wert vom integer + .jpg lässt mich verzweifeln.

Content-ID: 601572

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

Ausgedruckt am: 23.11.2024 um 11:11 Uhr

145916
Lösung 145916 03.09.2020 aktualisiert um 17:06:30 Uhr
Goto Top
Moin.
Z.B. als Powershell
param(
    [parameter(mandatory=$true)][string]$path,
    [parameter(mandatory=$true)][int]$integer
)
# hide powershell console
$showWindow = Add-Type –memberDefinition '[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -name "Win32ShowWindow" -namespace W –passThru  
[void]$showWindow::ShowWindow((Get-Process –id $pid).MainWindowHandle, 0)
Add-Type -A System.Windows.Forms
# build path
$filepath = join-path $path "$integer.jpg"  
# test if file exists
if(Test-Path $filepath){
    # show image
    start $filepath
}else{
    # image not found, show messagebox
    [System.Windows.Forms.MessageBox]::Show("Für die Nummer '$integer' existiert kein Bild im Ordner '$path' !",'Fehler',0,[System.Windows.Forms.MessageBoxIcon]::Exclamation)  
}

Aufrufen dann mit dem Pfad und dem Integer-Wert so in der PS-Konsole
.\script.ps1 -path "D:\Ordner" -integer 16  
Gruß eagle
KARPitain
KARPitain 03.09.2020 um 19:06:24 Uhr
Goto Top
Hallo Eagle,

hammer, vielen Dank Dir face-smile

Hast du oder jemand anders auch einen Lösungsweg für VBS?
145916
145916 04.09.2020 aktualisiert um 09:04:49 Uhr
Goto Top
Zitat von @KARPitain:
Hast du oder jemand anders auch einen Lösungsweg für VBS?
Auch kein Problem
Dim fso,shell,filepath
If WScript.Arguments.Count <> 2 then
    MsgBox "Falsche Parameteranzahl! Bitte den Pfad als ersten und die Nummer als zweiten Parameter übergeben.", vbExclamation  
    wscript.quit
End if
Set fso = CreateObject("Scripting.FileSystemobject")  
Set shell = CreateObject("Wscript.Shell")  
filepath = wscript.arguments(0) & "\" & wscript.arguments(1) & ".jpg"  
if fso.FileExists(filepath) then
    shell.Run filepath,1,False
Else
    MsgBox "Datei mit dieser Nummer kann nicht gefunden werden!",vbExclamation  
End if

Aufruf dann mittels erstem Parameter als Ordner und zweiten der Nummer
Script.vbs "d:\Ordner" 16  
miniversum
miniversum 04.09.2020 um 16:06:14 Uhr
Goto Top
Hallo,

muss es den unbedingt ps oder vbs sein?
Gerade für sowas ist doch batch prädistiniert und auch wesentlich kompakter:

@if exist %1\%2.jpg (%1\%2.jpg) else (NichtDa.jpg)
Aufruf:
Suche.bat "D:\Bilder" 16
145916
145916 04.09.2020 aktualisiert um 16:24:53 Uhr
Goto Top
Zitat von @miniversum:
Gerade für sowas ist doch batch prädistiniert und auch wesentlich kompakter:
Ja so ganz ohne jegliches Error-Handling kann ich dir auch mit der PS "kürzer" machen face-wink. Kürzer ist nicht immer besser, und so fällt das bereits mit Leerzeichen im Pfad auf die Fresse.
miniversum
miniversum 04.09.2020 aktualisiert um 19:45:12 Uhr
Goto Top
Der Pfad wird ja schon mit " übergeben und die Bilddateien sind ja nur Zahlen als Namen, also ohne Leerzeichen. Wird keine Zahl übergeben, also fehlt der Parameter liefert das "if exist" als falsch. Was willst du da noch errorhandeln? Aber sogar um ganz sicher zu gehen und Pfade mit Leerzeichen nochmal explizit zu unterstützen wäre es kein wirklich längerer code:
@if exist "%~1\%~2.jpg" ("%~1\%~2.jpg") else (NichtDa.jpg)
KARPitain
KARPitain 04.09.2020 aktualisiert um 20:07:08 Uhr
Goto Top
Hallo eagle,

ich habe deinen Code jetzt mal für mich in einen Kontext zu bringen und mir fällt relativ schnell auf, dass mir Zusammenhänge fehlen, die mich daran hindern an's Ziel zu kommen. Zumindest konnte ich die Teile die für mich Sinn machen entnehmen und in meinen Code ohne einen Syntaxfehler übernehmen :P

Ich möchte ja meinen integer Wert (DB908.DBW220) dynamisiert im Skript abarbeiten. Das heißt, wenn der Wert "16" ist, möchte ich nach dem File "16.jpg" suchen und diesen zur Anzeige bringen.
Wenn der Integerwert sich auf "55" ändert, soll nach dem File "55.jpg" gesucht werden und zur Anzeige gebracht werden.

Mir fehlt der Bezug wo der integer in deinem Code verarbeitet ist.

Außerdem fehlt mir der Bezug zu dem festen Ordner der durchsucht werden soll.
Wir der nicht im Code eigentlich mit

Const strFolder = "D:\Beispiel"  
definiert?

Auch fehlt mir der Bezug für das Ergebnis. ist "filepath" sozusagen ein String wodrin nun der komplette Pfad zurückgegeben wird?

Außerdem verstehe ich nicht ganz was du mit diesem Abschnitt meinst

Script.vbs "d:\Ordner" 16  

wo soll das hin? in den Code?

Entschuldige nochmal, wie gesagt ich bin was programmieren angeht ein kompletter Neueinsteiger aber ich danke dir sehr für deine Mühen.

Bzgl. der Frage ob es in VBS oder PoShe sein muss: ja, leider. Da es ein Skript in einer Visualisierungssoftware "WinCC Professional 7.4" ist und diese Software keine Batch Dateien unterstützt, jedenfalls wüsste ich nicht wie.

Hier einmal das was ich bisher aufbauen konnte; der Code macht für mich nur bedingt Sinn, also ich merke schon, dass dort etwas fehlt aber ich komme nicht richtig weiter. Bitte nicht lachen face-sad

Function PictureName_Trigger(ByVal Item)

Dim expression
Dim WkzID
Dim objFolderFSO
Dim objFSO
Dim objFolder
Dim filepath
Dim expression_int
Dim expression_str

Const strFolder = "D:\Project\SMV\Schuler\Rasterbilder"  
Const strExtension = ".JPG"  

Set WkzID = HMIRuntime.Tags("M1_DB908_DBW_220")  
HMIRuntime.Trace "Werkzeug_ID: " & WkzID.Read & vbCrLf  
WkzID.Read
expression_int = WkzID.value
expression_str = CStr(expression_int)

Set objFolderFSO = CreateObject("Scripting.FileSystemObject")  
Set	objFolder = objFolderFSO.GetFolder(strFolder)
filepath = wscript.arguments(0) & "\" & wscript.arguments(1) & ".jpg"  
HMIRuntime.Trace "Suche nach Datei: " & filepath.Read & vbCrLf  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
	If  objFSO.FileExists(filepath) Then
	PictureName_Trigger = "filepath"  
			
	Else
	PictureName_Trigger = "D:\Project\SMV\Schuler\Rasterbilder\KEINE_ID.jpg"  
  
End If
End Function