我正在嘗試為我們使用的私有頁面創建桌面快捷方式,該頁面將在 Edge 中打開,定向到特定 URL,并將 GUID 作為 URL 引數傳遞。
我嘗試了以下方法,但正如您所料,只有字串“powershell”被傳遞到 URL,而不是回傳的 GUID。
SET a=powershell -Command "[guid]::NewGuid().ToString()"
C:\Windows\System32\cmd.exe /c start msedge "https://www.website.com/page?user="%a% --no-first-run
如何將 URL 的 %a% 部分替換為系統 GUID 的回傳內容?
powershell -Command "[guid]::NewGuid().ToString()"
uj5u.com熱心網友回復:
筆記:
這個答案解決了所問的問題:它在批處理檔案變數中捕獲來自 PowerShell 命令的輸出,以供以后在同一個批處理檔案中使用。
或者,手頭的特定任務也可以通過單個 PowerShell 命令完全執行,如zett42 的有用答案所示。
批處理cmd.exe檔案(由_ _ _ _ _ _ . [1]
相反,您必須使用for /f回圈來捕獲變數中的命令輸出(通常在每個輸出行上回圈,但在您的情況下只有一個輸出行):
@echo off
setlocal
:: Capture the output from a PowerShell command in variable %guid%, via
:: a for /f loop:
for /f "usebackq delims=" %%a in (`powershell -Command "[guid]::NewGuid().ToString()"`) do set "guid=%%a"
:: Note: No need for `cmd /c` from a batch file to use `start`
start "" msedge "https://www.website.com/page?user=%guid%" --no-first-run
注意:setlocal雖然不是絕對必要的,但將任何變數定義本地化到手頭的批處理檔案中。
for /?在會話中運行以cmd.exe尋求幫助。這個答案更詳細地討論了使用
for /f捕獲命令輸出;尤其:usebackq這里不是絕對必要的,但通常建議您可以自由地使用兩者'并"在被呼叫的命令列中參考。同樣,
delims=這里不是絕對必要的,因為根據定義輸出不包含空格,但如果意圖是完整地捕獲輸出行,通常是可取的。
""as 第一個引數start在這里不是絕對必要的,但通常它在呼叫路徑必須雙引號的應用程式時很有用。如果沒有""作為第一個引數,雙引號應用程式路徑將被解釋為starts視窗標題引數(僅有意義地適用于控制臺應用程式)。
[1] 在 POSIX 兼容的 shell 中,使用$(...)(例如,captured="$(whoami)")。在 PowerShell 中,您可以使用命令 -as-is 作為分配的 RHS(例如,$captured = whoami)
uj5u.com熱心網友回復:
可以使用 PowerShell one-liner 直接完成所有這些操作:
powershell -noprofile -command start msedge \"https://www.website.com/page?user=$(New-Guid) --no-first-run\"
- 在大多數情況下,傳遞
-noprofiletopowershell.exe是減少啟動時間并提供更可預測的環境的好主意,因為不會加載任何用戶組態檔。 start是Start-Process命令的別名。- 這里
start傳遞了兩個位置引數,要啟動的行程的名稱(-FilePath引數)和行程的引數作為單個字串(-ArgumentList引數)。因此,必須參考第二個引數。要將命令處理器中的引號傳遞cmd.exe到 PowerShell,它們必須進行反斜杠轉義。 - 在行程的引數字串中,子運算式運算子
$(…)用于呼叫New-Guid行內命令并將其轉換為字串(通過隱式呼叫它回傳.ToString()的物件的方法)。Guid - 如果您確實需要在批處理腳本的其他部分中使用 GUID 作為變數(從問題中不清楚),那么這個有用的答案提供了一個解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/504255.html
下一篇:跨平臺安裝程式路徑
