Windows 배치 파일에 Powershell 변수 전달

할 수 없다

내 프로젝트와 이것이 배포되는 방법에 대한 제한으로 인해 배치 파일에서 powershell 명령을 실행하고 powershell 스크립트의 변수를 에코해야합니다. 이 스크립트는 RS-232를 통해 TV에서 모델 번호를 검색하고 HEX로 모델을 반환합니다.

대본을 작성하고 실행되는 한 줄로 꼼꼼하게 압축했습니다. 명령 줄에서 'powershell -command "[myCondensedScript]"'도 할 수 있으며 훌륭하게 작동합니다.

for /F %%a in ('powershell.exe -command "$port = New-Object System.IO.Ports.SerialPort COM1, 9600, none, 8, one;[byte[]] $reqSerial = 1,48,65,48,65,48,54,2,67,50,49,55,3,112,13;[byte[]] $reqModel = 0x01,0x30,0x41,0x30,0x41,0x30,0x36,0x02,0x43,0x32,0x31,0x37,0x03,0x70,0x0D;[byte[]] $response = '';[byte[]] $readData = '';$port.DTREnable = $True;$port.Open();$port.Write($reqModel, 0, $reqModel.Count);$x=0;do {$x++;$readData = $port.ReadChar();If($x -eq 13 -or $x -eq 14 -or $x -eq 15 -or $x -eq 16 -or $x -eq 17 -or $x -eq 18 -or $x -eq 19 -or $x -eq 20 -or $x -eq 21) {$response += $readData;};}while($response.Length -ne 9);$port.Close();$hexResponse = $response.forEach([char]);$hexResponseString = [string]$hexResponse;$hexResponseString = $hexResponseString.replace(' ','');$finalHex = $hexResponseString+0;Write-Host $finalHex;"^; (Get-Variable -ValueOnly -Name finalHex^).value') do set HexCode=%%a

echo %HexCode%

출력은 간단합니다.

   echo +

예상되는 출력은 다음과 같습니다.

563332330

나는 변수와 배치 파일에 능숙하지 않기 때문에 변수에서 무엇을 놓치고 있는지 잘 모르겠습니다. 나는 광범위하게 검색했고이 페이지가 다소 도움이된다는 것을 발견했다. https://ss64.com/nt/for.html 나는 내가 원하는 정확한 변수에 %% a를 할당하는 방법을 이해하지 못한다. 어떤 도움이라도 대단히 감사하겠습니다!

mklement0

명령에 포함 된 문자열 '의 컨텍스트에서 이스케이프 처리되지 않은 포함 된 문자가 있으므로 '...'작동하지 않습니다.

대신, 사용 usebackq구문 분석 옵션을의 명령 묶어야`...` 인용과 이스케이프 단순화.

다음 예제 명령합니다 (에서 시도하는 기술을 보여 cmd.exe교체, 프롬프트 대신 배치 파일에서 %%a함께 %a) :

for /f "usebackq delims=" %%a in (`
  powershell -c "$finalHex = '0x68 0x69' -replace '0x| '; $finalHex"
`) do set "HexNum=%%a"
echo %HexNum%

위의 인쇄 다음, 내장 증명 "...", '...';(사용의 맥락에서 그대로 일을 "..."둘러싸에 전달 된 PowerShell 명령 주위에 따옴표를 위해 -c( -Command전체), 방지 cmd.exe내용을 해석에서)를 :

6969

PowerShell의 CLI를 사용 하여 usebackq규칙 을 요약하려면 다음을 수행하십시오 .

  • "..." 전체 로 포함 된 PowerShell 명령을 -c/ -Command매개 변수에 전달합니다 ( Windows PowerShell 에서 암시 되지만 PowerShell [Core] 6+ 에서는 필요함 ).

    • cmd.exe"..."문자열 의 내용을 해석하지 않기 때문에 ( %...%환경 변수 참조 제외 ), cmd.exe메타 문자 (예 : 특수 구문 의미를 가진 문자 &)는 그대로 사용할 수 있습니다.
  • 작은 따옴표 ( ')는 그대로 사용할 수 있습니다.

  • 전체 명령 문자열에 큰 따옴표 ( ) 포함 해야하는 경우 :""..."

    • PowerShell [Core] 6+ ( pwsh.exe)에서는 "".
    • Windows PowerShell ( powershell.exe)에서를 사용 \""하지만 문자열 내부 공백이 정규화됩니다 ( 단일 공백 으로 접힘 ). \"이를 피하지만 ^.NET cmd.exe과 같은 메타 문자 이스케이프 해야합니다 &.
for /f "usebackq delims=" %%i in (`
  REM In PowerShell [Core] 6+ (pwsh.exe), use "" instead of \""
  powershell -noprofile -c "(\""hi &    there\"").Replace('i', '@')"
`) do @echo [%%i]

위의 결과는 ""다음 같습니다 (정규화 된 공백에 유의하십시오. PowerShell [Core] 6+에서는 이런 일이 발생하지 않습니다) :

[hi & there]

에 관해서는 특정 명령 :

  • 인용에 ^더 이상 필요하지 않으므로 (캐럿)을 제거하십시오 `...`. 에 전달 된 명령 둘러싸 powershell -c 전체 의를 "...".

  • 관심있는 값만 반환되도록 출력 스트림의 오염을 방지합니다. 이는 다음을 의미합니다.

    • Write-Host명령을 제거하십시오 .

    • 장소 $null = ...전과 $port.Open(), $port.Write(...), $port.Close()호출은하지 않는 것이 있는지 확인하는 암시 적 (참조 출력을 생성 이 답변 에 대한 설명을).

  • 간단하게 사용 $finalHex 자체 출력을 (불필요하기 위해 마지막 문으로 (Get-Variable ...)).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PowerShell에서 배치 파일의 매개 변수 전달

분류에서Dev

배치에서 powershell로 변수 전달

분류에서Dev

Windows 배치 스크립트에서 powershell 스크립트로 매개 변수 전달

분류에서Dev

ThisScriptsDirectory를 매개 변수로 배치에서 Powershell로 전달

분류에서Dev

배치 파일에서 Powershell 스크립트로 변수를 전달하는 방법

분류에서Dev

배치 파일에서 Powershell 스크립트로 변수를 전달하는 방법

분류에서Dev

Unix와 같은 매개 변수를 Windows 배치 파일에 전달하는 방법

분류에서Dev

vbs에서 배치 파일로 변수 전달

분류에서Dev

배치에서 mysql 파일로 매개 변수 전달

분류에서Dev

배치 파일의 매개 변수에 텍스트로 '&'전달

분류에서Dev

Windows 레지스트리의 전체 파일 이름 (공백 포함)을 매개 변수로 배치 파일에 전달하는 방법은 무엇입니까?

분류에서Dev

Powershell에서 배치 스크립트로 인수 전달

분류에서Dev

PowerShell 프롬프트에서 배치 파일에 이스케이프 문자가있는 인수 전달

분류에서Dev

배치 파일에서 PowerShell -ComputerName에 컴퓨터 이름을 변수로 전달하는 방법은 무엇입니까?

분류에서Dev

인수로 배치 파일 전달 지연 변수 확장

분류에서Dev

PowerShell에서 매개 변수로 배열 전달

분류에서Dev

Windows 배치 스크립트에 명령 줄 인수 전달

분류에서Dev

Windows 배치 스크립트에 명령 줄 인수 전달

분류에서Dev

Windows 배치 스크립트에 명령 줄 인수 전달

분류에서Dev

Powershell | 함수에 배열 요소 전달

분류에서Dev

.NET 함수에 PowerShell 배열 전달

분류에서Dev

Windows 배치 파일이 vbscript에 파일 이름을 전달합니다.

분류에서Dev

배치 파일에서 매개 변수를 전달하는 방법

분류에서Dev

VB 스크립트에서 배치 파일로 매개 변수 전달

분류에서Dev

배치 파일에서 MYSQL 스크립트로 매개 변수 전달

분류에서Dev

공백이있는 경로를 배치 파일에 매개 변수로 전달

분류에서Dev

숫자로 끝나는 배치 파일에 매개 변수 전달

분류에서Dev

PowerShell : 함수에 지역 변수 전달

분류에서Dev

Windows 탐색기에서 .exe 파일로 변수 전달

Related 관련 기사

  1. 1

    PowerShell에서 배치 파일의 매개 변수 전달

  2. 2

    배치에서 powershell로 변수 전달

  3. 3

    Windows 배치 스크립트에서 powershell 스크립트로 매개 변수 전달

  4. 4

    ThisScriptsDirectory를 매개 변수로 배치에서 Powershell로 전달

  5. 5

    배치 파일에서 Powershell 스크립트로 변수를 전달하는 방법

  6. 6

    배치 파일에서 Powershell 스크립트로 변수를 전달하는 방법

  7. 7

    Unix와 같은 매개 변수를 Windows 배치 파일에 전달하는 방법

  8. 8

    vbs에서 배치 파일로 변수 전달

  9. 9

    배치에서 mysql 파일로 매개 변수 전달

  10. 10

    배치 파일의 매개 변수에 텍스트로 '&'전달

  11. 11

    Windows 레지스트리의 전체 파일 이름 (공백 포함)을 매개 변수로 배치 파일에 전달하는 방법은 무엇입니까?

  12. 12

    Powershell에서 배치 스크립트로 인수 전달

  13. 13

    PowerShell 프롬프트에서 배치 파일에 이스케이프 문자가있는 인수 전달

  14. 14

    배치 파일에서 PowerShell -ComputerName에 컴퓨터 이름을 변수로 전달하는 방법은 무엇입니까?

  15. 15

    인수로 배치 파일 전달 지연 변수 확장

  16. 16

    PowerShell에서 매개 변수로 배열 전달

  17. 17

    Windows 배치 스크립트에 명령 줄 인수 전달

  18. 18

    Windows 배치 스크립트에 명령 줄 인수 전달

  19. 19

    Windows 배치 스크립트에 명령 줄 인수 전달

  20. 20

    Powershell | 함수에 배열 요소 전달

  21. 21

    .NET 함수에 PowerShell 배열 전달

  22. 22

    Windows 배치 파일이 vbscript에 파일 이름을 전달합니다.

  23. 23

    배치 파일에서 매개 변수를 전달하는 방법

  24. 24

    VB 스크립트에서 배치 파일로 매개 변수 전달

  25. 25

    배치 파일에서 MYSQL 스크립트로 매개 변수 전달

  26. 26

    공백이있는 경로를 배치 파일에 매개 변수로 전달

  27. 27

    숫자로 끝나는 배치 파일에 매개 변수 전달

  28. 28

    PowerShell : 함수에 지역 변수 전달

  29. 29

    Windows 탐색기에서 .exe 파일로 변수 전달

뜨겁다태그

보관