![批处理文件中的 %1 未在 Windows 10 中注册](https://linux22.com/image/1618763/%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20%251%20%E6%9C%AA%E5%9C%A8%20Windows%2010%20%E4%B8%AD%E6%B3%A8%E5%86%8C.png)
我正在尝试为某个文件类型的安装程序创建批处理文件。问题是,每当我运行批处理文件时,%1 就会消失,并且不会应用于 ftype。相反,它只剩下引号。这是代码。
@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
这是由于某种原因未显示 %1 的输出。
.beest=beestTest
beestTest="C:\BeestFileType\TextEditor.exe" -f ""
Press any key to continue . . .
答案1
因此我的解决方案是使用 %%1 而不是 %1,因为双百分比会显示 % 而不是查找参数。
答案2
我认为问题在于批处理文件是由 执行的command.com
,而不是cmd.exe
。IExpress 毕竟是一种非常古老的产品,可以追溯到 Windows 早期(我真的不推荐使用它)。
您需要使用cmd
现代命令解释器在 IExpress 中明确执行批处理文件,如下所示:
cmd.exe /c file.bat argument