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

使用批处理脚本在iis中创建X个应用程序和应用程序池,iis,batch-file,Iis,Batch File,我目前有这个批处理文件,允许我在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 an

我目前有这个批处理文件,允许我在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%\system32\inetsrv\APPCMD add app /site.name:"Default Web Site" /path:/!vir! /physicalpath:"%arg2%"

    REM CREATE APP POOL
    %systemroot%\system32\inetsrv\appcmd add apppool /name:!pool! /managedPipelineMode:Integrated /processModel.identityType:ApplicationPoolIdentity /enable32BitAppOnWin64:false

    REM ASSIGN APP POOL TO APPLICATION
    %systemroot%\system32\inetsrv\appcmd 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"
请尝试呼叫您的批次:

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
无效。与汇编程序不同,批处理不会执行标签后面的“指令”

问题3:
:END
标签是多余的。它不在批次中使用

问题4:
endlocal
是多余的-到达文件末尾将关闭在相同上下文中运行的任何本地环境

问题5:使用
%n
(n数字)分配变量将在分配的值中包含括起的引号。使用
%~n
处理包含的引号

第6期:
FOR/F
针对的是文件。然而,它将解析带引号的字符串,就像它是一条
echo%string%
指令一样,这只是一行,因此您的代码将只处理一次(遇到的“行数”),将第一个
分隔的标记分配给
%%a
,其余的标记分配给
%%b
(未使用)

在这种情况下,你需要的要简单得多-

FOR %%a in (%arg3%) do (

问题7:此代码中未建立变量
poolname
。除非在执行代码之前分配它,
set pool=!病毒!!池名
池设置为
!维尔
本身相当于
%%a
。给定您显示的参数和我标记的更改,然后在您的代码中,
!游泳池!==!病毒!==%%a

第1期:
:END-ENDLOCAL
不应在“for%%a”循环中的右括号后面。这将生成一个语法错误

问题2:如果将
:END ENDLOCAL
移动到下一行,则
ENDLOCAL
无效。与汇编程序不同,批处理不会执行标签后面的“指令”

问题3:
:END
标签是多余的。它不在批次中使用

问题4:
endlocal
是多余的-到达文件末尾将关闭在相同上下文中运行的任何本地环境

问题5:使用
%n
(n数字)分配变量将在分配的值中包含括起的引号。使用
%~n
处理包含的引号

第6期:
FOR/F
针对的是文件。然而,它将解析带引号的字符串,就像它是一条
echo%string%
指令一样,这只是一行,因此您的代码将只处理一次(遇到的“行数”),将第一个
分隔的标记分配给
%%a
,其余的标记分配给
%%b
(未使用)

在这种情况下,你需要的要简单得多-

FOR %%a in (%arg3%) do (

问题7:此代码中未建立变量
poolname
。除非在执行代码之前分配它,
set pool=!病毒!!池名
池设置为
!维尔
本身相当于
%%a
。给定您显示的参数和我标记的更改,然后在您的代码中,
!游泳池!==!病毒!==%%a

请查看
Microsoft的IIS手册
:)请查看
Microsoft的IIS手册
:)