如何在/ F命令中使用单引号

时间:2017-11-27 05:44:03

标签: windows batch-file

我想要.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

2 个答案:

答案 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