[英]Batch script: Pass returned GUID as URL parameter for desktop shortcut
我正在嘗試為我們使用的私有頁面創建桌面快捷方式,該頁面將在 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()"
批處理文件(由cmd.exe
執行)在與 POSIX 兼容的 shell 中沒有所謂的命令替換的概念(PowerShell 本身也提供了這一功能,盡管它在那里沒有正式名稱):分配命令的能力Z738E6221F398663到一個變量。
相反,您必須使用for /f
循環在變量中捕獲命令 output (通常循環每個 output 行,但在您的情況下只有一個Z78E6221F6393D1356681DB398F4CE6DZ 行):
@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
for /?
在cmd.exe
session 中尋求幫助。
這個答案更詳細地討論了使用for /f
來捕獲命令 output ; 尤其:
usebackq
在這里並不是絕對必要的,但通常建議您可以自由地在被調用的命令行中同時使用'
和"
引用。
同樣, delims=
在這里不是絕對必要的,因為 output 根據定義不包含空格,但如果意圖是完整地捕獲 output 行,通常是可取的。
作為第一個start
參數的""
在這里並不是絕對必要的,但通常在調用路徑必須雙引號的應用程序時它很有用。 如果沒有""
作為第一個參數,雙引號應用程序路徑將被解釋為starts
窗口標題參數(僅有意義地適用於控制台應用程序)。
可以使用 PowerShell 單線直接完成所有這些操作:
powershell -noprofile -command start msedge \"https://www.website.com/page?user=$(New-Guid) --no-first-run\"
-noprofile
傳遞給powershell.exe
在大多數情況下是減少啟動時間並提供更可預測的環境的好主意,因為不會加載任何用戶配置文件。start
是Start-Process
命令的別名。start
傳遞了兩個位置 arguments,要啟動的進程的名稱( -FilePath
參數)和進程的 arguments 作為單個字符串( -ArgumentList
參數)。 因此,必須引用第二個參數。 要將命令處理器cmd.exe
中的引號傳遞到 PowerShell,它們必須進行反斜杠轉義。$(…)
用於內聯調用New-Guid
命令並將其轉換為字符串(通過隱式調用它返回的Guid
object 的.ToString()
方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.