Beim Versuch, eine Batch-Datei neu zu schreiben, habe ich in die Möglichkeit der Verwendung von Powershell untersucht. Das Hauptproblem, das ich damit hatte, war, dass .ps1
Dateien nicht standardmäßig ausführbar sind. Ich fand eine Lösung here, die ich weiter unten kopieren würde, aber ich bin sehr verwirrt über die Syntax in der ersten Zeile:Seltsame Umleitung in Batch/Powershell Polyglot
<# : batch script
@echo off
setlocal
cd %~dp0
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
endlocal
goto:eof
#>
# here write your powershell commands...
Hier ist, was ich von der Prüfung wissen:
- Der Raum zwischen
<#
und:
ist erforderlich, obwohl es mehrere sein kann. - Es kann auch eine Nummer 0-9 im Voraus haben, wie
3<# :
, was mich vermuten lässt, dass es einige Seltsamkeit mit Redirects und Labels gibt. - Der Text nach dem Doppelpunkt ignoriert und notwendig, nicht
- Wenn ich einen Befehl, bevor es, wie
git <# : batch script
hinzufügen, zeigt die Shell, dass es versuchte,git : batch script 0<#
zu bewerten und die Datei - die angegebenen nicht finden kann, ändern
#
zu einem gültigen Dateinamen macht die Beschwerde weg (natürlich) - Der Versuch, die Zeile in einer interaktiven Sitzung ausführen, tatsächlich beschweren sich darüber, nicht in der Lage, die angegebene Datei zu finden, aber von einem Skript ausführen (auch wenn es ist die einzige Zeile in der Datei
.cmd
) führt im Hintergrund zu
Die letzte Kugel ist der Teil, den ich versuche herauszufinden. Was ist anders an den Umgebungen? Mein Verständnis war, dass ein Teil des Problems war, dass das Ausführen einer Bat-Datei so analysiert wird, als ob jede Zeile manuell eingegeben würde. Warum beklagt es sich nicht, dass #
eine ungültige Datei ist, wenn es über ein Skript aufgerufen wird?
Sind Sie sicher, dass es sich nicht um einen mehrzeiligen Kommentar handelt, der zum Anzeigen des "alten" Batchdateicodes verwendet wird? – Moerwald