我已经创建了一个浴室文件来为sql server添加防火墙规则...这里是脚本的一部分
set PROGRAM="%ProgramFiles%\Microsoft SQL Server\MSSQL11.DBSERVER\MSSQL\Binn\sqlservr.exe"
set RULE_NAME="SQL Server"
echo Checking firewall rule %RULE_NAME%.
netsh advfirewall firewall show rule name=%RULE_NAME% >nul
if not ERRORLEVEL 1 (
echo Rule %RULENAME% already exist.
) else (
echo Rule %RULENAME% not exist. Creating...
netsh advfirewall firewall add rule name=%RULE_NAME% dir=in action=allow program=%PROGRAM%
netsh advfirewall firewall add rule name=%RULE_NAME% dir=out action=allow program=%PROGRAM%
)
我说的是第一行
set PROGRAM="%ProgramFiles%\Microsoft SQL Server\MSSQL11.DBSERVER\MSSQL\Binn\sqlservr.exe"
有没有办法在不输入路径的情况下找到文件? as文件sqlservr.exe在不同的操作系统中的位置不同,并且取决于实例名称...
答案 0 :(得分:1)
有点棘手:
@ECHO OFF >NUL
SETLOCAL EnableExtensions
rem EnableDelayedExpansion
set "ss=sqlservr.exe"
rem set "ss=GoogleUpdate.exe" my testing value
for /F "tokens=2 delims==" %%G in ('
wmic Service where "pathname like '%%%ss%%%'" get PathName/value^|find /I "%ss%"
') do (
@rem echo debugging G "%%~G"
for /F delims^=^" %%x in ("%%G") do (
set "_program=%%~x"
@rem echo debugging x "%%~x"
)
)
rem next two lines merely for debugging to check up results
set _program
echo "%_program%"
此处for
循环
%%G
检索PathName
值; %%x
删除返回值中的结尾回车(wmic
行为:每个输出行以0x0D0D0A
结尾,而不是公共0x0D0A
})。见Dave Benham的WMIC
and FOR /F
: A fix for the trailing <CR>
problem
请注意delims^=^"
把双引号字符视为分隔符的技巧。