Jump to content
Sign in to follow this  
olegischinski

vbs für ImageMagick

Recommended Posts

hallo an alle!

 

Folgendes Problem:

In einem Ordner soll eine beliebige Anzahl Bilder markiert werden, die dann über das Kontextmenü mit "Senden an" per Script an ImageMagick übergeben werden und konvertiert in einem Ordner auf dem Desktop landen sollen.

Dazu habe ich ein Code-Beispiel aus der Doku von IM leicht angepasst

Dim FName
Dim wsh,fs
Set wsh = CreateObject("Wscript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
'
NArgs = WScript.Arguments.Count
Redim FName(NArgs-1)
strInputFiles  = ""
For i = 0 to NArgs - 1
       FName(i) = """" & WScript.Arguments(i) & """"
       strInputFiles = strInputFiles & " " & FName(i)
next
'
fs.CreateFolder "Desktop\Web-Bilder"
Command = "C:\Programme\ImageMagick-6.6.3-Q16\convert.exe " & strInputFiles & " -resize 700 ""Desktop\Web-Bilder\file.jpg"""
wsh.run command, 7, true

Das klappt soweit auch, allerdings würde ich die Zieldateien auch gern wie die Ausgangsdateien benennen lassen.

 

Kann mir jemand helfen, wie das zu bewerkstelligen ist?

Vielen Dank im voraus!

Share this post


Link to post

Hallo und Willkommen,

 

ich kenne ImageMagick nicht, vermute aber, dass Du das über eine Option bei der convert.exe steuern kannst. Möglicherweise die, wo Du momentan "...Web-Bilder\file.jpg" stehen hast?

 

Per Script sähe ich nur die Möglichkeit, Convert innerhalb der Schleife für jedes Bild einzeln aufzurufen und die Datei hinterher jeweils umzubenennen.

Share this post


Link to post

hallo Frank,

 

besten Dank für den Hinweis (manchmal braucht's einen Anstoß, dass der Baum umfällt ;-) Ich hab den convert-Befehl jetzt in die Schleife gelegt, und alles läuft, wie gewünscht ... War ein schöner Denksport bei Vorkenntnis = 0.

Hier der Schnippel, falls das jemanden interessiert.

Dim FName()
Dim wsh,fs
Set wsh = CreateObject("Wscript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateFolder "Desktop\Web-Bilder"
'
Set Args = WScript.Arguments
For Each strArg in Args
	InFile = """" & strArg & """"
	OutFileName = fs.getBaseName(InFile)
	Command = "C:\Programme\ImageMagick-6.6.3-Q16\convert.exe " & InFile & " -resize 700 ""Desktop\Web-Bilder\" & OutFileName & ".jpg"""
	wsh.run command, 7, true
next

 

Edit:Wie ich gerade bemerkt habe, wird bei der Auswahl zu vieler Dateien (ca. 25) die Argumentenliste zu lang.

Kann man das beheben?

Edited by olegischinski

Share this post


Link to post

…die Argumentenliste zu lang...
 

Die Microsoftseite (https://support.microsoft.com/de-de/kb/830473) dazu ist irgenwei ein wenig unübersichtlich zu dieser Problematig und die Lösungsansätze für mich nicht hilfreich.

Nun meine ich aber schon folgendes herausgefunden zu haben:

Wenn man ein Script nicht direkt in den Sendto-Ordner schiebt sondern dort nur ein Link mit einer *.lnk Datei erstellt limitiert sich die Argumentenliste sogar auf 260 Zeichen.
Ein Shell-Script (*.cmd abe auch *.vbs) bekommt dagegen schon 2048 oder doch 8192 ... ?

Der Artikel auf dieser Seite könnte einem da vielleicht weiterhelfen: https://blogs.msdn.microsoft.com/oldnewthing/20031210-00/?p=41553/

Dort heißt es "While I'm here, I may as well mention another limit: The maximum size of your environment is 32767 characters. The size of the environment includes the all the variable names plus all the values."

 

Nun sind die Enviroment-Variablen aber nicht die Argumente. Trotzdem gut zu wissen das man Variable-Namen für das Environment besser kurz halten soll, da die eingesparte länge dann dem Inhalt zu gute kommt...
 - um das mal positiv auszudrücken...

 

Also auf die Frage "Kann man das beheben?" - würde ich wohl noch antworten: Nein!

Ein Limit gibt es leider übeall, das es unter Windows allerdings so knapp und kurz ist - ist natürlich besonders ärgerlich!

Und ich weiß leider nicht mal wie man das am besten umgeht, so das jeder Benutzer mit dem Script besser zurecht kommt.

Derzeit gebe ich dann meinen Usern mit, das sie bitte diese Dateien erstmal in einen speziellen Ordner kopieren sollen und dann diesen an SendTo schicken, statt die Datei einzelnd zu markieren.

Ein sehr unschöner "work-a-round" - wie ich finde...

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...