none
Erstellen und ausfuehren eines Befehls in Powershell RRS feed

  • Frage

  • Guten Tag,

    Ich habe ein Problem das ich alleine nicht gelöst bekomme, und leider hat mich google diesemal auch enttäuscht.

    Ich arbeite gerade an diversen Mod's für das Spiel No Man's Sky. Um Mods für dieses Spiel zu produzieren, muss man diverse Playstation files Compilieren (PSARC)/(*.PAK)
    Dies geschieht über diverse Kommandozeilen Programme.

    die meisten Programme kann ich einfach über Batch Dateien steuern da die Kommandos immer gleich sind. 
    Für ein Programm muss ich aber in dem Kommando ein Filename eintragen.
    Da bisher fast nix über die Architektur diese Spiel bekannt ist habe ich hier viel Reverse Engineering zu betreiben. Das heisst ich muss tausende Dateien decompilieren und dafür brauche ich ein automatisierten Befehl

    Ich möchte nun ein Powershell Script erstellen, dass mir den Befehl automatisch anpasst jenachdem was für ein File neben dem script im gleichen Ordner liegt.

    z.B:

    MBINCompiler.exe C:\temp\GCSPACESHIPGLOBALS.GLOBAL.MBIN
    pause

    Dieser Befehl benötige ich um aus einer *.MBIN Datei eine lesbare XML datei zu erstellen. es enpackt das File GCSPACESHIPGLOBALS.GLOBAL.MBIN
    Dieses File liegt neben der MBINCompiler.exe im gleichen Ordner. 

    Wie müsste ein Powershell Script aussehen das mir diesen Befehl automatisch anpasst für das Aktuelle *.MBIN file?
    es müsste diesen befehl genereiern und ausführen:

    MBINCompiler.exe C:\temp\[FILENAME DER NEBEN DER EXE IM ORDENR LIEGT UND IMMER EINE MBIN DATEI IST]
    pause

    Ich hoffe ihr könnt mir dabei Helfen

    Vielen Dank
    Marco



    • Bearbeitet Pin-Lui Freitag, 26. August 2016 08:48
    Freitag, 26. August 2016 08:32

Antworten

  • Natürlich crasht der Compiler, wenn man ihm als Kommandozeilenparameter Code übergibt, für den er wahrscheinlich nicht ausgelegt ist.

    Du musst die Dateien im Ordner bestimmen mit

    $Files = Get-Childitem "C:\temp\*.mmbin"
    Wenn du eine Datei daraus auswählen willst, kannst du 
    $File = $Files | Out-Gridview -Passthru
    Oder als Schleife über alle kannst du es so ausführen:
    foreach($File in $Files)
    {
       MBinCompiler.exe $file.Fullname
    }



    • Als Antwort vorgeschlagen Chaftalie Freitag, 26. August 2016 09:07
    • Als Antwort markiert Pin-Lui Freitag, 26. August 2016 15:42
    Freitag, 26. August 2016 08:49

Alle Antworten

  • Ich bin zwar jetzt nicht der PS Experte aber versuche mal das:

    MBINCompiler.exe C:\temp\*.MMBIN
    pause

    Ich werde selber gleich mal ausprobieren ob das so funktionieren kann.

    EDIT: wenn ich jetzt z.B. in einem Ordner ./*.txt eingebe öffnet er mir  die erste .txt Datei die er findet müsste hier auch funktionieren oder?

    Felix


    Felix Lerchner


    • Bearbeitet Chaftalie Freitag, 26. August 2016 08:38
    Freitag, 26. August 2016 08:35
  • Vielen Dank für die Superschnelle Antwort! Funktioniert aber leider nicht bei mir.  MBIN Compiler crasht

    EDIT: io exception illegals zeichen im pfad

    http://i.imgur.com/woi9iVf.jpg

    • Bearbeitet Pin-Lui Freitag, 26. August 2016 08:47
    Freitag, 26. August 2016 08:39
  • Natürlich crasht der Compiler, wenn man ihm als Kommandozeilenparameter Code übergibt, für den er wahrscheinlich nicht ausgelegt ist.

    Du musst die Dateien im Ordner bestimmen mit

    $Files = Get-Childitem "C:\temp\*.mmbin"
    Wenn du eine Datei daraus auswählen willst, kannst du 
    $File = $Files | Out-Gridview -Passthru
    Oder als Schleife über alle kannst du es so ausführen:
    foreach($File in $Files)
    {
       MBinCompiler.exe $file.Fullname
    }



    • Als Antwort vorgeschlagen Chaftalie Freitag, 26. August 2016 09:07
    • Als Antwort markiert Pin-Lui Freitag, 26. August 2016 15:42
    Freitag, 26. August 2016 08:49
  • Auch ihnen vielen Dank für die Antwort. 
    ich habe folgendes versucht:

    $Files = Get-Childitem "C:\temp\*.mbin"
    foreach($File in $Files)
    {
       MBinCompiler.exe $file.Fullname
    }

    und bekomme diese Meldung im ISE:

    PS C:\temp> C:\temp\test.ps1
    Die Benennung "MBinCompiler.exe" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei od
    er eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad ko
    rrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
    Bei C:\temp\test.ps1:4 Zeichen:20
    +    MBinCompiler.exe <<<<  $file.Fullname
        + CategoryInfo          : ObjectNotFound: (MBinCompiler.exe:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException

    EDIT:
    Habe es Hinbekommen mit

    $Files = Get-Childitem "C:\temp\*.mbin"
    foreach($File in $Files)
    {
       ./MBINCompiler.exe $file.Fullname
    }


    DANKE!



    • Als Antwort vorgeschlagen Chaftalie Freitag, 26. August 2016 09:06
    • Bearbeitet Pin-Lui Freitag, 26. August 2016 10:39
    Freitag, 26. August 2016 09:00
  • Die foreach Schleife braucht man hier aber nicht oder? Pin-Lui hat schließlich soweit ich das verstanden habe immer nur eine .mbin Datei da drinnen.

    Vielleich Hilft es den Pfad des Compilers vor seinem Namen zu packen.
    bzw. ./ müsste auch schon reichen da das script ja im gleichen Verzeichnis liegt.

    EDIT: ok das habe ich nicht mehr gesehen naja jetzt stehts doppelt da ^^


    Felix Lerchner



    • Bearbeitet Chaftalie Freitag, 26. August 2016 09:07 da war ich doch um einiges zu langsam
    Freitag, 26. August 2016 09:06
  • Ich glaube ich lasse es so. funktioniert mit nur einer Datei wie auch mit mehreren. Super! danke nochmals!
    Freitag, 26. August 2016 09:25