.bat 파일에서 PowerShell 스크립트로 변수를 소싱하려면 어떻게 해야 합니까?
.bat 스크립트의 일부를 PowerShell로 교체합니다.배치 파일에 대한 구성은 다음과 같은 파일을 통해 수행됩니다.set적절한 환경 변수.저는 그 변수 값들을 그 안에 로드할 방법을 찾고 있습니다..ps1스크립트, 수정 없이.bat파일(다른 곳에서도 사용되는 파일).
예를들어.bat다음과 같이 표시됩니다.
set VAR_ONE=some_value
set VAR_TWO=/other-value
한 번에 한 번에 한 번에 한 번에 한 번에 한 번에CALL구성 파일과 변수를 사용할 수 있습니다.도트 소싱 둘 다 해봤어요 (. filename.bat) 및 전화(& filename.bat) PowerShell의 구성 파일 중 어느 것도 변수를 표시하지 않습니다.두 사람 모두와 함께 접속해 보았습니다.$VAR_ONE그리고.$env:VAR_ONE통사론
디스크의 형식을 수정하지 않고 이러한 구성 파일을 로드하는 좋은 방법은 무엇입니까?
PowerShell Community Extensions를 사용하는 경우에는Invoke-BatchFile이렇게 됩니다.Visual Studio vcvarsall.bat 파일을 사용하여 Visual Studio 도구를 사용하도록 PowerShell 세션을 구성합니다.
구문 분석을 수행합니다(시작하지 않는 줄은 모두 생략).set그들을 첫번째로 나누었습니다.=성격.작은 C# cmdlet에서 수행하거나 작은 PowerShell 스크립트를 사용하여 직접 수행할 수 있습니다.
CMD /c "batchFile.bat && set" | .{process{
if ($_ -match '^([^=]+)=(.*)') {
Set-Variable $matches[1] $matches[2]
}
}}
나는 이 코드를 가지고 있고 어딘가에서 온 것이라고 확신하지만 크레딧이 손실되었습니다. 파워셸 커뮤니티 확장에서 온 것 같습니다.Invoke-Batch대본.
선호하는 옵션은 구성을 a로 변경하는 것입니다..ps1파일을 만들고 변수 정의를 PowerShell 구문으로 변경합니다.
$VAR_ONE = 'some_value'
$VAR_TWO = '/other-value'
그러면 파일을 점 소스로 전송할 수 있습니다.
. filename.ps1
현재 사용 중인 형식을 유지하려면 다음과 같이 값을 구문 분석해야 합니다.
Select-String '^set ([^=]*)=(.*)' .\filename.bat | ForEach-Object {
Set-Variable $_.Matches.Groups[1].Value $_.Matches.Groups[2].Value
}
참고: 위의 내용은 v3 이전의 PowerShell 버전에서는 작동하지 않습니다.v2 호환 버전은 다음과 같습니다.
Select-String '^set ([^=]*)=(.*)' .\filename.bat | ForEach-Object {
$_.Matches
} | ForEach-Object {
Set-Variable $_.Groups[1].Value $_.Groups[2].Value
}
먼저 배치 파일을 통해 할 수 있습니다.call구성 파일을 실행한 다음 PowerShell 스크립트를 실행합니다.
.bat이 호출된다고 가정하면test.bat, 정의를 내리다testps.ps1:
$lines = cat "test.bat"
$output = @{};
foreach ($line in $lines) {
$bits = $line.Split("=");
$name = $bits[0].Split(" ")[1];
$val = $bits[1];
$output[$name] = $val
}
return $output
그 결과는 다음과 같습니다.
C:\temp> .\testps.ps1
Name Value
---- -----
VAR_TWO /other-value
VAR_ONE some_value
C:\temp> $x = .\testps.ps1
C:\temp> $x
Name Value
---- -----
VAR_TWO /other-value
VAR_ONE some_value
C:\temp> $x["VAR_ONE"]
some_value
더 좋은 방법으로 분할할 수 있습니다(찾으면 수정됩니다).
언급URL : https://stackoverflow.com/questions/20077820/how-can-i-source-variables-from-a-bat-file-into-a-powershell-script
'programing' 카테고리의 다른 글
| BINORY_DOUBLE 유형 열이 있는 Oracle 데이터베이스를 반영하는 방법 (0) | 2023.09.21 |
|---|---|
| 워드프레스 데이터베이스를 가져올 때 mySQL 1046 오류 (0) | 2023.09.21 |
| 자바스크립트가 있는 폴더의 파일 이름 목록 가져오기 (0) | 2023.09.21 |
| asp.net 및 c#을 사용하여 Excel 2007 또는 Word 2007 파일을 스트리밍하는 방법 (0) | 2023.09.21 |
| Excel에서 읽기(다차원 배열 범위) C# (0) | 2023.09.21 |