使用批处理脚本在 IIS 中创建 X 个应用程序和应用程序池



我目前有这个批处理文件,允许我在 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

最新更新