Batch file 添加/?批量切换?
有人知道如何在使用/?参数调用我的批处理文件时添加要触发的操作吗?我一直使用-h来显示用法,但这一次我需要我的-harg来显示其他内容 编辑:实际上我已经尝试过这样解析属性Batch file 添加/?批量切换?,batch-file,Batch File,有人知道如何在使用/?参数调用我的批处理文件时添加要触发的操作吗?我一直使用-h来显示用法,但这一次我需要我的-harg来显示其他内容 编辑:实际上我已经尝试过这样解析属性 for %%i in (%*) do .... 但是跳过了/?参数,我将尝试您的解决方案,看看是否不同 顺便说一句,为什么在分析%%i时会跳过/?参数?您会对照/?字符串,如果为true,则使用ECHO命令打印帮助。比如说, @ECHO OFF IF "%1"=="/?" ( ECHO "Help Line 1"
for %%i in (%*) do ....
但是跳过了/?参数,我将尝试您的解决方案,看看是否不同
顺便说一句,为什么在分析%%i时会跳过/?参数?您会对照/?字符串,如果为true,则使用
ECHO
命令打印帮助。比如说,
@ECHO OFF
IF "%1"=="/?" (
ECHO "Help Line 1"
ECHO "Help Line 2"
) ELSE (
ECHO "Do Your Action"
)
你可以试试这个:
@echo off
if "%1"=="/?" goto print_help
goto normal_start
:print_help
echo Here is your help
goto end
:normal_start
echo I'm working
:end
/?
似乎被%%i in(%*)的跳过,但这是for循环的通配符功能,它尝试查找与/?
匹配的文件,但会失败
如果不修改结果,则不能在“正常”for循环中使用?
或*
您可以使用SHIFT
命令访问所有参数
:parameterLoop
if "%~1"=="/?" call :help
if "%~1"=="-h" call :help
if "%~1"=="-o" call :other
shift
if not "%~1"=="" goto :parameterLoop
如果还想显示所选选项,则echo命令有问题,因为这通常会显示帮助而不是/?
您可以通过使用echo(%1
而不是echo%1
来避免这种情况,下面是这些视觉效果的实际使用案例
@ECHO OFF
:parameterLoop
IF /I "%1"=="/install" GOTO install
IF /I "%1"=="/uninstall" GOTO uninstall
IF /I "%1"=="/repair" GOTO repair
IF /I "%1"=="" (
ECHO.
ECHO Please use the following commands to proceed:
ECHO.
ECHO Use /INSTALL to setup the software
ECHO.
ECHO Use /UNINSTALL to remove the software
ECHO.
ECHO Use /REPAIR to repair the software
ECHO.
GOTO end
)
:install
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
MSIEXEC /I "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
COPY /Y "production.xml" "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
GOTO end
:uninstall
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
DEL /F /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
MSIEXEC /X "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
RMDIR /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client"
GOTO end
:repair
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
DEL /F /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
MSIEXEC /X "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
RMDIR /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client"
MSIEXEC /I "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
COPY /Y "production.xml" "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
GOTO end
:end
EXIT /B
REM Src https://stackoverflow.com/questions/8179425/adding-switch-in-batch
基本上,通过该命令,我可以使用/install或/uninstall或/repair开关安装我的软件……这在intune中非常有用,并且可以使用AdvancedInstaller定制MSI
此外,如果不键入任何内容,则会出现一个小的“帮助”菜单,指示用户哪些命令可用:)