%1 in Batchdatei wird in Windows 10 nicht registriert

%1 in Batchdatei wird in Windows 10 nicht registriert

Ich versuche, eine Batchdatei für ein Installationsprogramm eines Dateityps zu erstellen. Das Problem besteht darin, dass jedes Mal, wenn ich die Batchdatei ausführe, %1 verschwindet und nicht auf ftype angewendet wird. Stattdessen bleiben nur die Anführungszeichen übrig. Hier ist der Code.

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------    

assoc .beest=beestTest
ftype beestTest="C:\BeestFileType\TextEditor.exe" -f "%1" %*
pause

Hier ist die Ausgabe, die aus irgendeinem Grund %1 nicht anzeigt.

.beest=beestTest
beestTest="C:\BeestFileType\TextEditor.exe" -f ""
Press any key to continue . . .

Antwort1

Meine Lösung bestand also darin, %%1 statt %1 zu verwenden, da bei doppelten Prozentsätzen % angezeigt wird, anstatt nach einem Parameter zu suchen.

Antwort2

Ich glaube, das Problem liegt darin, dass die Batchdatei von ausgeführt wird command.comund nicht von cmd.exe. IExpress ist schließlich ein sehr altes Produkt, das aus den frühen Anfängen von Windows stammt (ich kann seine Verwendung nicht wirklich empfehlen).

Sie müssen die Batchdatei explizit in IExpress mit cmd, einem modernen Befehlsinterpreter, wie folgt ausführen:

cmd.exe /c file.bat argument

verwandte Informationen