我正在嘗試將 Google Chrome 版本與我的腳本中的變數批量關聯,但是
powershell -Command "& {(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion } > chromever.txt
set /p version=<chromever.txt
echo %version%
pause
檔案中的文本為:97.0.4692.71 但控制臺輸出回傳: ■9 ■9
請幫忙...
uj5u.com熱心網友回復:
直接的解決方法是使用Set-Content而不是>:
powershell -Command "(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion | Set-Content chromever.txt"
請注意,我已經洗掉"& { ... }"了您的-Command論點,因為它從來沒有必要 - 直接使用"..."。舊版本的CLI 檔案錯誤地建議這& { ... }是必需的,但這已得到糾正。
問題在于,>在 Windows PowerShell ( powershell.exe) 中,默認情況下會生成“Unicode”編碼(UTF-16LE 編碼)檔案,cmd.exe但無法正確解碼(默認情況下)。Set-Content默認為 ANSI 編碼(ASCII 的超集),并且由于您只檢索僅由 ASCII 范圍字符組成的版本號,因此不會出現編碼問題。
或者,您可以使用for /f回圈直接決議 PowerShell 的輸出,而無需保存到臨時檔案:
for /f "usebackq delims=" %%i in (`
powershell -c "(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion"
`) do set version=%%i
echo [%version%]
uj5u.com熱心網友回復:
我想說,在您嘗試聲稱您的輸出存在問題之前,您應該考慮發布一個正確完整的命令列。
這有不平衡的雙引號:
powershell -Command "& {(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion } > chromever.txt
如果您實際上包含缺少的雙引號,并且在正確的位置這樣做,您將不會收到來自 PowerShell 的 Unicode (UTF-16 LE) 輸出。
位置不正確:
powershell -Command "& {(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion } > chromever.txt"
如果你正確放置它,輸出將是 ANSI:
正確位置:
powershell -Command "& {(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion }" > chromever.txt
本質上是因為你錯過了那個雙引號,它在行尾被有效地關閉了(重定向>是在 PowerShell 中完成的)。因此,您的結果以 UTF-16 LE 形式回傳,而不是所需的 ANSI 編碼,(當在 cmd.exe 中完成重定向時)。
但是,就個人而言,我會這樣做:
@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command "(Get-Item $(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion" 1>"chromever.txt"
@Set /P "version=" 0<"chromever.txt"
@Echo(%version%
如果我實際上不需要文本檔案:
@For /F %%G In ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command "(Get-Item $(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo.ProductVersion" 2^>NUL') Do @Set "version=%%G"
@Echo(%version%
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/412085.html
標籤:
上一篇:嘗試從批處理腳本運行Powershell命令時,PowerShell用文本檔案中的另一行替換行無法按預期作業
下一篇:Bat腳本讀取命令提示符的輸出
