2017-11-28 25 views
0

PowerShell 스크립트를 사용하여 출력 파일 이름의 일부로 사용하는 어셈블리 버전을 얻기 위해 파일을 읽습니다. 그러나, 내가 읽고있는 파일에는 주석 ("//")이 포함되어 있습니다.이 주석은 무시하고 싶습니다.PowerShell에서 주석 처리 된 줄에 내가 포함시키려는 패턴을 포함하더라도 어떻게 제외시킬 수 있습니까?

여기 내 입력 파일의 두 줄이 있습니다.

param (
    [string]$path 
    ,[string]$file = "AssemblyInfo.cs" 
    ,[string]$projectName) 

# Search for the AssemblyVersion to be appended to the filename 
$pattern = '\[assembly: AssemblyVersion\("(.*)"\)\]' 
(Get-Content $path\$file) | ForEach-Object{ 
    if($_ -match $pattern){ 
     $fileVersion = [version]$matches[1] 
    } 
} 
Write-Host $projectName-$fileVersion 

현재의 패턴이 입력 모두 라인에 일치합니다

// [assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyVersion("1.0.0.0")] 

가 여기 내 현재 스크립트입니다 : 첫 번째, 두 번째는 원하는 값으로 라인, 무시하는 주석 행입니다 . 나는 $ 패턴 값 또는 무시하기 위해 "($ _ -match의 $ 패턴)이"주석 처리 된 줄을 수정하는 방법

Cannot convert value "1.0.*" to type "System.Version". 
Error: "Input string was not in a correct format." 
At C:\Scripts\Powershell\Get-FileName.ps1:10 char:36 
+   $fileVersion = [version]$matches[ <<<< 1] 
+ CategoryInfo   : NotSpecified: (:) [], RuntimeException 
+ FullyQualifiedErrorId : RuntimeException 

: 댓글이 유효한 버전을 가지고 있지 않기 때문에 오류가 발생합니다 ?

답변

0

일치하려는 문자열이 항상 줄의 시작 부분에있을 것이라는 것을 알고 있으면 정규 표현식에서 줄 시작 표시 자 (^)를 사용할 수 있습니다. 슬래시 (//).

귀하의 패턴은 같을 것이다 : -match

$oldRegex = '\[assembly: AssemblyVersion\("(.*)"\)\]' 
$newRegex = '^\[assembly: AssemblyVersion\("(.*)"\)\]' 

'// [assembly: AssemblyVersion("1.0.*")]' -match $oldRegex // returns True 
'// [assembly: AssemblyVersion("1.0.*")]' -match $newRegex // returns False 
'[assembly: AssemblyVersion("1.0.*")]' -match $oldRegex // returns True 
'[assembly: AssemblyVersion("1.0.*")]' -match $newRegex // returns True 
+0

나는 시작에 공백이나 탭이있을 수 있습니다 일치하고 문자열로

$pattern = '^\[assembly: AssemblyVersion\("(.*)"\)\]' 

테스트합니다. – RobP

+0

그런 다음 \ s *를 정규식의 시작으로 추가하십시오. '^ \ s * \ [assembly : AssemblyVersion \ ("(. *)"\) \]' – swestner