mit Mouse markierte Datei umbenennen

  • VBScript

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Janick1975.

    mit Mouse markierte Datei umbenennen

    Hallo,

    ich bin jetzt schon fast eine Woche im Netz unterwegs und suche...
    jetzt habe ich mich hier angemeldet, da ich denke, mit VBS würde es gehen.
    ich habe es mit batch, cmd und powershell gesucht, aber ich denke es geht hoffentlich mit vbs
    leider habe ich keine Erfahrung mit vbs..... "hello world" schaffe ich :thumbsup:

    ich möchte eine (oder mehrere, aber eine würde schon genügen) Datei mit der Mouse markieren,

    dann möchte ich diese Datei mit vbs umbennen.
    Wenn ich also eine Datei mit der Mouse markiere und dann vbs starte, soll die Datei danach einen neuen Namen haben.

    Also sozusagen
    von C:\verzeichnis_87\pfad_F\Datei_1234.txt
    zu C:\verzeichnis_87\pfad_F\präfix_Datei_1234.txt

    wobei das Verzeichnis und die Datei immer variabel sind.

    würde mich echt freuen, wenn es mit vbs machbar wäre....

    Euch schon mal vielen Dank
    Die Schwierigkeit hierbei ist, dass dein Script die ausgewählte Datei im Explorer findet.
    Vor allem könnten ja mehrere Explorer-Fenster da sein.
    Welche Datei ist dann gemeint?
    Außerdem ist es nicht einfach, aus dem Explorer rauszukriegen, welche Datei(en) gerade selektiert sind.
    Der IE kann das zumindest und damit haben manche schon gearbeitet:
    stackoverflow.com/a/21335906
    Das alles wäre mir aber bedientechnisch zu unsicher und gefährlich fehleranfällig.
    Ich möchte nicht, dass alle in meinen Explorer-Fenstern selektierten Dateien plötzlich umbenannt werden.

    Mein Ansatz wäre ein anderer.
    Wenn du aus dem Explorer die Datei per Drag&Drop auf dein VBS-Script ziehst, kannst du dort Wscript.Arguments abfragen und bekommst den Dateinamen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod vielen Dank für Deine Antwort.
    ok, das leuchtet mir ein mit dem wackligen Fokus im Explorer

    habe jetzt mit deinem Ansatz Drag&drop probiert und auch im Inet was gefunden was gut funktioniert...

    Quellcode

    1. Set FS = CreateObject("Scripting.FileSystemObject")
    2. FileName = Wscript.Arguments(0)
    3. Prefix = Left(FileName, InStrRev(FileName, ".") - 1)
    4. Postfix = Mid(FileName, InStrRev(FileName, "."))
    5. Today = Year(Now) & "_" & Right("0" & Month(Now), 2) & "_" & Right("0" & Day(Now), 2)
    6. NewName = Prefix & "_" & Today & Postfix
    7. FS.MoveFile FileName, NewName




    aber leider nicht, wenn die Datei ein Leezeichen hat <X
    probiere jetzt mit Chr(34) & Name & Chr(34) , aber ich weiss ehrlich nicht wie ;(
    @petaod nochmal vielen Dank für Deine Antwort.

    doch leider kriege ich es nicht hin.
    ich habe Deine Codezeilen VOR meinen gestellt,

    Quellcode

    1. For Each a In WScript.Arguments
    2. Args = Args & " " & a
    3. Next
    4. FileName = Args
    5. Set FS = CreateObject("Scripting.FileSystemObject")
    6. FullFileName= Wscript.Arguments(0)
    7. Set objFile = FS.GetFile(FullFileName)
    8. FileName=FS.GetFileName(objFile)
    9. FilePath=FS.GetParentFolderName(objFile)
    10. FileExt=FS.GetExtensionName(objFile)
    11. FileBaseName=FS.GetBaseName(objFile)
    12. Today = Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2)
    13. NewName = FilePath & "\" & Today & "_" & FileName
    14. FS.MoveFile FullFileName, NewName


    doch leider:

    Skript: c:\blabla.vbs
    Zeile: 1
    Zeichen: 4
    Fehler: ungültiges Zeichen
    Code: 800A0408
    Quelle: Kompilierungsfehler in Microsoft VBscript


    diesen Fehler habe ich gegoogelt... ich habe es im Editor ( notepad ++) NICHT als Ansi gespiechert,...
    jetzt geht es ohne Leerzeichen, aber mit Leerzeichen eben wieder nicht ,....

    jetzt habe ich erst mal die Schnauze voll und gehe in die Kneipe:
    .. wieder Fehlermeldung :
    Kneipe nicht möglich
    Code: Covid-19 :thumbdown:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Janick1975“ ()

    Der Fehler meint, dass For Each nicht unterstützt wird.
    Welche Windows-Version nutzt du?

    Ausserdem fällt mir gerade auf, dass eigentlich auch dein Code aus Post #3 laufen müsste.
    Bei mir steht in WScript.Arguments(0) der komplette Pfad.
    Der Code läuft bei mir problemlos auch bei Blanks im Dateinamen.

    Da wäre in hilfreich gewesen, wenn du die Fehlermeldung gleich mitgeliefert hättest.

    Im übrigen gibt es eine gute Entwicklungsumgebung für VBS:
    VbsEdit
    Wenn du öfters solche Anforderungen hast, solltest du dich damit beschäftigen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    @petaod nochmal vielen Dank für Deine Antwort und Deine Geduld.

    mein BS: Windows 10 Pro 64bit Version 20H2

    ich habe mir VbsEdit installiert und der meldet mit dann gleich folgenden Fehler:

    VbsEdit 64 bit

    Line: 2
    Column:1
    Error: Index außerhalb des gültigen Bereichs
    Code: 800A0009
    Source: Laufzeitfehler in Microsoft VBScript
    Node: blabla.vbs
    Url: blabla.vbs

    System: Die Adresse des Speichersteuerblocks ist unzulässig


    nach googlen gehe ich davon aus, das dieser Fehler deswegen ist, da keine Datei markiert ist

    ich habe jetzt nochmal rumgetestet und folgendes funktioniert auch mit Leerzeichen:
    aa bb .txt wird zu aa bb _20210325 .txt

    Quellcode

    1. Set FS = CreateObject("Scripting.FileSystemObject")
    2. FileName = Wscript.Arguments(0)
    3. Prefix = Left(FileName, InStrRev(FileName, ".") - 1)
    4. Postfix = Mid(FileName, InStrRev(FileName, "."))
    5. Today = Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2)
    6. 'NewName = Today & "_" & Prefix & Postfix
    7. NewName = Prefix & "_" & Today & Postfix
    8. FS.MoveFile FileName, NewName

    wenn ich jedoch das Datum (so sollte es sein) nach vorne setze, dann funktioniert es nicht

    Quellcode

    1. Set FS = CreateObject("Scripting.FileSystemObject")
    2. FileName = Wscript.Arguments(0)
    3. Prefix = Left(FileName, InStrRev(FileName, ".") - 1)
    4. Postfix = Mid(FileName, InStrRev(FileName, "."))
    5. Today = Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2)
    6. NewName = Today & "_" & Prefix & Postfix
    7. 'NewName = Prefix & "_" & Today & Postfix
    8. FS.MoveFile FileName, NewName

    es kommt dann diese Fehlermeldung

    Windows Script Host

    Skript: c:\blabla.vbs
    Zeile: 8
    Zeichen: 1
    Fehler: ungültige(r) Dateiname oder -nummer
    Code: 800A00034
    Quelle: Laufzeitfehler in Microsoft VBscript

    zwischen funktioniert und nicht liegt nur dieser Unterschied:

    funzt nicht: NewName = Today & "_" & Prefix & Postfix
    funktioniert: NewName = Prefix & "_" & Today & Postfix

    und ich bin wirklich penibel jedes Zeichen durchgegangen

    ich kapiere es einfach nicht.

    Janick1975 schrieb:

    das dieser Fehler deswegen ist, da keine Datei markiert ist
    dass keine Datei auf das Script gezogen wird, also das Arguments-Array keine Einträge hat.
    Dann gibt es nicht mal den Eintrag an der Position 0.

    Janick1975 schrieb:

    wenn ich jedoch das Datum (so sollte es sein) nach vorne setze, dann funktioniert es nicht
    Logisch.
    Dein Prefix besteht aus dem kompletten Pfad incl. Platte und Verzeichnissen.
    Wenn du da davor etwas einfügst, gibt es unsinnige Pfadangaben: 20210325_c:\temp\test
    Damit kann das Filesystem nichts anfangen.
    Teile dein Prefix auf in Pfad und Dateiname und füge das Datum vor dem Dateinamen ein.

    Und wenn du schon das FileSystemObject als Instanz hast, dann nutze es auch als Parser.

    Visual Basic-Quellcode

    1. Set FS = CreateObject("Scripting.FileSystemObject")
    2. FileName = Wscript.Arguments(0)
    3. Path = FS.GetParentFolderName(FileName)
    4. Name = FS.GetFileName(FileName)
    5. Timestamp = Year(Now) &  Right("0" & Month(Now), 2) &  Right("0" & Day(Now), 2)
    6. NewName = Path & "\" & Timestamp & "_" & Name
    7. FS.MoveFile FileName, NewName
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Wenn du jetzt noch eine Fehlerbehandlung haben möchtest, falls jemand das Script ausführt, ohne eine Datei darauf zu ziehen, kannst du in der ersten Zeile noch einen Ausstieg einbauen.
    Und eine Fehlerbehandlung, falls du z.B. ein Directory drauf ziehst.

    Visual Basic-Quellcode

    1. If Wscript.Arguments.Count = 0 Then WScript.Echo "please drag a file to the script" : WScript.Quit
    2. Set FS = CreateObject("Scripting.FileSystemObject")
    3. FileName = Wscript.Arguments(0)
    4. If Not FS.FileExists(FileName) Then WScript.Echo "not a file: " & FileName : WScript.Quit
    5. Path = FS.GetParentFolderName(FileName)
    6. Name = FS.GetFileName(FileName)
    7. Timestamp = Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2)
    8. NewName = Path & "\" & Timestamp & "_" & Name
    9. FS.MoveFile FileName, NewName
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Hallo zusammen,
    auch mir hat es echt geholfen. Vielen Dank dafür.
    Allerdings funktioniert es nicht bei Ordnern.
    Habe schon File durch Folder ersetzt. Bekomme aber Fehler ohne Ende.
    Geht das überhaupt mit dem Script?
    Ihr seid der einzige Strohhalm. Bei google kommt alles mögliche raus aber nichts was mir hilft.
    Tausend dank vorab.
    Micha
    Hallo @Janick1975,

    als Tipp noch:
    Lege dir die VBS-Datei in dein Userverzeichnis C:\Users\[User]\AppData\Roaming\Microsoft\Windows\SendTo ab, dann kannst du die markierten Dateien sogar über das Kontextmenü vom Windows-Explorer bearbeiten. Damit ist dann kein Drag&Drop mehr nötig und die Funktion steht dir überall zur Verfügung.null
    hier die Lösung für Ordner. Recht nett. Vielleicht kann es jemand brauchen:

    Visual Basic-Quellcode

    1. Set NeuerOrdner = CreateObject("Scripting.FileSystemObject")
    2. FullFolderName = Wscript.Arguments(0)
    3. Set Ordnername = NeuerOrdner.GetFolder(FullFolderName)
    4. FileName=NeuerOrdner.GetFileName(Ordnername)
    5. FilePath=NeuerOrdner.GetParentFolderName(Ordnername)
    6. Today = Year(Now) & " " & Right("0" & Month(Now), 2) & " " & Right("0" & Day(Now), 2)
    7. NewName = FilePath & "\" & Today & " " & FileName
    8. NeuerOrdner.MoveFolder FullFolderName, NewName


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()