簡體   English   中英

批處理腳本:將返回的 GUID 作為桌面快捷方式的 URL 參數傳遞

[英]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在大多數情況下是減少啟動時間並提供更可預測的環境的好主意,因為不會加載任何用戶配置文件。
  • startStart-Process命令的別名。
  • 這里start傳遞了兩個位置 arguments,要啟動的進程的名稱( -FilePath參數)和進程的 arguments 作為單個字符串( -ArgumentList參數)。 因此,必須引用第二個參數。 要將命令處理器cmd.exe中的引號傳遞到 PowerShell,它們必須進行反斜杠轉義。
  • 在進程的參數字符串中, 子表達式運算符$(…)用於內聯調用New-Guid命令並將其轉換為字符串(通過隱式調用它返回的Guid object 的.ToString()方法)。
  • 如果您確實需要在批處理腳本的其他部分中使用 GUID 作為變量(從問題中不清楚),那么這個有用的答案提供了一個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM