Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 添加/?批量切换?_Batch File - Fatal编程技术网

Batch file 添加/?批量切换?

Batch file 添加/?批量切换?,batch-file,Batch File,有人知道如何在使用/?参数调用我的批处理文件时添加要触发的操作吗?我一直使用-h来显示用法,但这一次我需要我的-harg来显示其他内容 编辑:实际上我已经尝试过这样解析属性 for %%i in (%*) do .... 但是跳过了/?参数,我将尝试您的解决方案,看看是否不同 顺便说一句,为什么在分析%%i时会跳过/?参数?您会对照/?字符串,如果为true,则使用ECHO命令打印帮助。比如说, @ECHO OFF IF "%1"=="/?" ( ECHO "Help Line 1"

有人知道如何在使用/?参数调用我的批处理文件时添加要触发的操作吗?我一直使用-h来显示用法,但这一次我需要我的-harg来显示其他内容

编辑:实际上我已经尝试过这样解析属性

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

此外,如果不键入任何内容,则会出现一个小的“帮助”菜单,指示用户哪些命令可用:)