2016-11-13 12 views
0

私は、特定のバインディング名(私の場合はCustomBinaryBinding)に対してhttpTransport要素をhttpsTransportに更新するバッチスクリプトを用意しています。 もっとエレガントで効率的な方法で書くにはどうすればいいですか?特定のxml要素の最適化を変更するバットファイル

batファイル:

@echo off 
setlocal enabledelayedexpansion 
set "search=httpTransport" 
set "replace=httpsTransport" 
set "bindingName=CustomBinaryBinding" 
set INTEXTFILE=C:\Users\tudor\Desktop\batch\web.config 
set OUTTEXTFILE=C:\Users\tudor\Desktop\batch\webTemp.config  
echo start 
(for /f "delims=" %%i in (!INTEXTFILE!) do (
    set "line=%%i" 
    for /f tokens^=1^,2^,3^ delims^=^<^"^= %%a in ("%%i") do ( 
     if "%%b" equ "binding name" if "%%c" equ "CustomBinaryBinding" (
      set "insideCorrectBinding=y" 
      )        
     for /f "delims= " %%m in ("%%b") do (
      if "%%m" equ "httpTransport" (    
      set "onCorrectLine=y"                    
      ) 
     ) 
    ) 
    if !insideCorrectBinding! equ y if !onCorrectLine! equ y (
     set "line=!line:%search%=%replace%!" 
     set "onCorrectLine="  
     set "insideCorrectBinding=" 
    )    
    echo(!line!     
    ) 
)>"%OUTTEXTFILE%" 

のweb.config:

<configuration>   
    <system.serviceModel>   
     <bindings>   
      <customBinding>   
       <binding name="CustomBinaryBinding">   
        <binaryMessageEncoding />   
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />   
       </binding>   
      </customBinding>  
      <customBinding>   
       <binding name="CustomBinaryBinding2">   
        <binaryMessageEncoding />   
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />   
       </binding>   
      </customBinding>     
     </bindings>   
     <client>   
      <endpoint address="../../PlatformAdminUtil.svc"   
       binding="customBinding" bindingConfiguration="CustomBinaryBinding"   
       contract="PlatformAdminUtil.PlatformAdminUtil" name="CustomBinding_PlatformAdminUtil" />   
      <endpoint address="../../EntityAccess.svc"   
       binding="customBinding" bindingConfiguration="CustomBinaryBinding"   
       contract="PlatformEntityAccess.EntityAccess" name="CustomBinding_EntityAccess" />   
      <endpoint address="../../EntityAdminAccess.svc"   
       binding="customBinding" bindingConfiguration="CustomBinaryBinding"   
       contract="PlatformEntityAdminAccess.EntityAdminAccess" name="CustomBinding_EntityAdminAccess" />   
      <endpoint address="../../LogErrorService.svc"   
       binding="customBinding" bindingConfiguration="CustomBinaryBinding"   
       contract="LoggerService.LogErrorService" name="CustomBinding_LogErrorService" />   
     </client>   
    </system.serviceModel>   
</configuration>   
+2

は、私には正常に見える、適切なクエリメカニズムです。何が間違っていると思いますか? – SomethingDark

答えて

1
if !insideCorrectBinding! equ y if !onCorrectLine! equ y (

if defined insideCorrectBinding if defined onCorrectLine (

であるべきで、これらはない設定されている場合、コードは以下のように解釈され

if equ y if equ y (

これはエラーを生成するはずです。

は、これらの変数が唯一またはyを設定することができますので、その後、if defined

関連する問題