我想要.bat脚本检查是否存在IIS插件,这是我尝试使用命令输出分配变量的内容,
set appcmd=%WINDIR%\System32\inetsrv\appcmd.exe
set cmd_list=%appcmd% list config -section:isapiFilters /text:[path='D:\iisplugins\F5XForwardedFor.dll'].path
for /f "usebackq" %%s in (`%cmd_list%`) do set filterPath=%%s
echo %filterPath%
但它不起作用,来自命令提示符的输出:
set filterPath=ERROR
echo ERROR
似乎“=”需要转义,所以我再试一次,
set cmd_list=%appcmd% list config -section:isapiFilters /text:[path^='D:\iisplugins\F5XForwardedFor.dll'].path
它仍然无效,“^”还需要转义吗?再试一次,
set cmd_list=%appcmd% list config -section:isapiFilters /text:[path^^='D:\iisplugins\F5XForwardedFor.dll'].path
仍然无法正常工作。甚至单引号都被转义了。 如果单独执行命令而不分配变量,它运行良好并返回正确的iis过滤器路径,
D:\iisplugins\F5XForwardedFor.dll
答案 0 :(得分:0)
找到解决方案,在标准中添加双引号,
set cmd_list=%appcmd% list config -section:isapiFilters /"text:[path='D:\iisplugins\F5XForwardedFor.dll'].path"
for /f "usebackq" %%s in (`%cmd_list%`) do set filterPath=%%s
echo %filterPath%
不是将命令结果赋给变量,而是检查" ERRORLEVEL"。
%appcmd% list config -section:isapiFilter /text:[path='D:\iisplugins\F5XForwardedFor.dll'].path | findstr F5XForwardedFor
if %ERRORLEVEL% == 1 ( echo "Found" )
if %ERRORLEVEL% == 0 ( echo "Not Found")
答案 1 :(得分:0)
您不需要对工作命令进行更改,只需将其括在双引号中即可。
For /F "Delims=" %%A In ('"%cmd_list%"') Do Set "filterPath=%%A"
完整示例:
@Echo Off
Set "appcmd=%__APPDIR__%inetsrv\appcmd.exe"
Set "cmd_list="%appcmd%" list config -section:isapiFilters /text:[path='D:\iisplugins\F5XForwardedFor.dll'].path"
Set "filterPath="
For /F "Delims=" %%A In ('"%cmd_list%" 2^>Nul') Do Set "filterPath=%%A"
If Defined filterPath Echo %filterPath%
Pause