/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . common . api . util . script Ċ Ċ import Ġcom . tencent . devops . common . api . pojo . Common Env Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset Ċ Ċ object ĠB at Script Util Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( B at Script Util :: class . java ) ĊĊĠĠĠ Ġfun Ġexecute En hance ( ĊĠĠĠĠĠĠĠ Ġscript : ĠString , ĊĠĠĠĠĠĠĠ Ġruntime Variables : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġdir : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenhance Script Ġ= ĠCommandLine Utils . solve Special Char ( script ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute ( en hance Script , Ġdir , Ġruntime Variables ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( script : ĠString , Ġdir : ĠFile ?, Ġruntime Variables : ĠMap < String , ĠString >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Dir Ġ= ĠSystem . getProperty (" java . io . tmpdir ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġif Ġ( tmp Dir . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile . create TempFile (" pa as _ build _ script _", Ġ". bat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( tmp Dir ). mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile . create TempFile (" pa as _ build _ script _", Ġ". bat ", ĠFile ( tmp Dir )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete On Exit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append ("@ echo Ġoff ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" set ĠDEV OPS _ BUILD _ SCRIPT _ FILE =${ file . absolute Path }\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ r \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Variables . plus ( Common Env . get Common Env ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( name , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çī¹æ®Ĭ ä¿ĿçķĻ åŃĹç¬¦ è½¬ ä¹ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclean Ġ= Ġvalue . replace (" \"", Ġ"\\ \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& ", Ġ"^ & ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("< ", Ġ"^ < ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("> ", Ġ"^ >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("| ", Ġ"^ | ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append (" set Ġ$ name =\" $ clean \"\ r \ n ") Ġ// Ġ åıĮ å¼ķ åı· éĺ² æŃ¢ åıĺéĩı åĢ¼ æľī ç©º æł¼ èĢĮ æĦı å¤ĸ æĪª æĸŃ å®ļä¹ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append (" set Ġ$ name =% $ name :~ 1 ,- 1 %\ r \ n ") Ġ// Ġ åİ» éĻ¤ åıĪ å¼ķ åı· ï¼Į éĺ² æŃ¢ è¢« ç¨ĭåºı è¯» åĪ° æľī åıĮ å¼ķ åı· çļĦ åıĺéĩı åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append ( script . replace ("\ n ", Ġ"\ r \ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" exit ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ r \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharset Ġ= ĠCharset . default Charset () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . write Text ( command . toString (), Ġcharset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCommandLine Utils . execute (" cmd . exe Ġ/ C Ġ\" ${ file . canonical Path } \"", Ġdir , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Fail Ġto Ġexecute Ġbat Ġscript ", Ġignore ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġignore ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ