Skript zur JPG-Umbenennung gemäß Rückgabewert

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Skript zur JPG-Umbenennung gemäß Rückgabewert

    Hallo zusammen,

    ich möchte folgenden Vorgang als Skript umsetzen:

    1. Alle *.jpg-Dateien im Pfad C:\DOKUMENTE identifizien und als DATEIPFAD-Variable merken
    2. Jede einzelne JPG im o.g. Pfad entsprechend dem Rückgabewert des Aufrufs "RENAME.exe --raw DATEIPFAD" umbennen.

    Das Ergebnis soll folgendermaßen sein.
    VORHER: BILD01.jpg, BILD02.jpg
    --->Skript Aufruf
    NACHHER: 01234.jpg, 01548.jpg (Dateinamen gemäß Zahlen-Rückgabewert von rename.exe)

    Wäre hier eine Umsetzung per VBS oder Batch möglich?
    Für eure Hilfe vielen Dank!
    Ich freue mich über jede Antwort.

    Viele Grüße
    Adrjan

    Adrjan schrieb:

    1. Alle *.jpg-Dateien im Pfad C:\DOKUMENTE identifizien und als DATEIPFAD-Variable merken

    Visual Basic-Quellcode

    1. ​Set FS=CreateObject("Scripting.FileSystemObject")
    2. Set Folder=FS.GetFolder("c:\docs")
    3. For Each File in Folder.Files
    4. If Right(File.Name,4) = ".jpg" Then
    5. '...
    6. End If
    7. Next

    Adrjan schrieb:

    2. Jede einzelne JPG im o.g. Pfad entsprechend dem Rückgabewert des Aufrufs "RENAME.exe --raw DATEIPFAD" umbennen.
    Was ist --raw?
    Hast du einen eigenen RENAME geschrieben?
    Was gibt der zurück?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Nochmals und zum Mitschreiben:
    Du hast jpg-Dateien in einem Ordner.
    Diese möchtest du einzeln durchgehen und mittels irgendeiner RENAME.exe umbenennen.
    RENAME gibt einen Wert zurück und dann möchtest du die Datei nochmals umbenennen.

    Da das Ganze so keinen Sinn macht, solltest du mit deiner Beschreibung nicht ganz so sparsam sein.
    Einfach so genau, dass auch ein Unbeteiligter wie ich es kapiere.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Sorry für meine ungenaue Beschreibung!

    Ich habe JPG-Dateien in einem Ordner mit einem - jeweils - willkürlichen Dateinamen.
    Diese Dateien werden einzeln durchgegangen und erhalten mit der RENAME.exe jeweils einen eindeutigen Dateinamen (das Ganze MUSS mit der Rename.exe erfolgen, da der Rückgabewert aus dem Inahlt der JPG generiert wird).
    RENAME benennt diese Datei NICHT um, sondern definiert/bestimmt nur einen Dateinamen und gibt diesen als Zahlenwert zurück.
    Das Skript soll dann die Aufgabe haben, diesen Rückgabewert als Dateinamen bei der jeweiligen JPG zu hinterlegen.

    War das so verständlich?
    Es fällt mir irgendwie schwer den Sachverhalt zu erklären.

    Vom Ablauf her:
    DATEI1.JPG -> SKRIPT-Aufruf: "Rename.exe --raw DATEI1.JPG" -> Rename.exe Rückgabewert: "123456789" -> Benenne Datei um: "123456789.JPG" -> Nächste Datei
    DATEI2.JPG -> SKRIPT-Aufruf: "Rename.exe --raw DATEI2.JPG"-> Rename.exe Rückgabewert: "987545781"-> Benenne Datei um: "987545781.JPG" -> Nächste Datei
    usw...

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Adrjan“ ()

    ich habe das Ganze nun soweit

    Visual Basic-Quellcode

    1. Set FS=CreateObject("Scripting.FileSystemObject")
    2. Set Folder=FS.GetFolder("c:\PFAD")
    3. Dim WshShell, oExec
    4. Set WshShell = CreateObject("WScript.Shell")
    5. For Each File in Folder.Files
    6. If Right(File.Name,4) = ".jpg" Then
    7. Set oExec = WshShell.Exec("C:\PFAD\bin\rename.exe --raw" & File)
    8. WScript.Echo oExec.ExitCode
    9. End If
    10. Next


    Leider scheint er die Datei aber nicht richtig zu finden. Als Rückgabewert erhalte ich leicher nur eine "0".

    [NACHTRAG]
    Ich habe jetzt festgestellt, dass rename.exe doch keinen Rückgabewert liefert. Über Kommandozeile wird lediglich der entsprechende Wert ausgegeben.

    Ich habe nun versucht, dass Ganze per ver Batch-Aufruf zu realisieren, aber das Ganze haut nicht wirklich hin:

    Visual Basic-Quellcode

    1. Set FS=CreateObject("Scripting.FileSystemObject")
    2. Set Folder=FS.GetFolder("c:\PFAD")
    3. Dim WshShell, oExec
    4. Set WshShell = CreateObject("WScript.Shell")
    5. For Each File in Folder.Files
    6. If Right(File.Name,4) = ".jpg" Then
    7. Shell.Run "C:\Windows\System32\cmd.exe /c " & "D:\batch.cmd " & GetFileName_From_FilePath(file), 0, vbTrue
    8. End If
    9. Next


    Die Batch sieht so aus:

    Visual Basic-Quellcode

    1. For /F "tokens=2 delims=':'" %%i in ('rename.exe "%1"') do Set "dateiname=%%i"
    Ansatz (ohne Errorhandling):

    Visual Basic-Quellcode

    1. Set WshShell = CreateObject("WScript.Shell")
    2. Set oExec = WshShell.Exec("cmd /c c:\rename.exe blabla")
    3. s=""
    4. Do While Not oExec.StdOut.AtEndOfStream
    5. s = s & oExec.StdOut.Read(1)
    6. Loop
    7. File.Move File.path & "\" & s & ".jpg"
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --