我目前有这个批处理文件,允许我在 IIS 中创建应用程序和应用程序池。 它可以工作,但它只创建一个应用程序和应用程序池。
这是我当前的脚本:
@echo ON
setlocal enabledelayedexpansion
REM "Content Source path"
set arg1=%1
REM "Content destination path"
set arg2=%2
REM "apps to setup"
set arg3=%3
REM Split virt names and loop through it.
FOR /F "tokens=1* delims=," %%a in (%arg3%) do (
set vir=%%a
set pool=!vir!!poolname!
REM CREATE APPLICATION
%systemroot%system32inetsrvAPPCMD add app /site.name:"Default Web Site" /path:/!vir! /physicalpath:"%arg2%"
REM CREATE APP POOL
%systemroot%system32inetsrvappcmd add apppool /name:!pool! /managedPipelineMode:Integrated /processModel.identityType:ApplicationPoolIdentity /enable32BitAppOnWin64:false
REM ASSIGN APP POOL TO APPLICATION
%systemroot%system32inetsrvappcmd set app /app.name:"Default Web Site/!vir!" /applicationPool:!pool!
):END Endlocal
install.bat "c:\source" "c:\target" "APP1,APP2,APP3">
请有人告诉我我做错了什么。
谢谢。
尝试调用你的批处理:
install.bat "c:source" "c:target" APP1,APP2,APP3
没有双引号将APP..
.
并在批处理中设置args
:
set "arg3=%3,%4,%5"
问题 1::END ENDLOCAL
不应遵循"for %%a"循环中的右括号。这将生成语法错误。
问题 2: 如果将:END ENDLOCAL
移动到下一行,则endlocal
无效。与汇编程序不同,Batch 不执行标签后出现的"指令"。
问题 3::END
标签是多余的。它未在批处理中使用。
问题 4:endlocal
是多余的 - 到达文件末尾会关闭在同一上下文中运行的任何本地环境。
问题 5:使用 %n
(n 个数字(分配变量将在分配的值中包含括起来的引号。使用 %~n
处理附上引号。
问题 6: FOR/F
以文件为目标。虽然它会解析带引号的字符串,就好像它是一个echo %string%
指令一样,但这只是一行,因此你的代码将只处理一个(遇到的"行"数(时间,将第一个,
分隔的标记分配给%%a
,其余分配给%%b
(未使用(
在这种情况下,您需要的要简单得多 -
FOR %%a in (%arg3%) do (
问题 7:此代码中未建立变量poolname
。除非在执行代码之前分配,否则set pool=!vir!!poolname!
会将pool
设置为 !vir!
,这本身等效于 %%a
。鉴于您显示的参数以及我标记的更改,那么在您的代码中,!pool!==!vir!==%%a