繁体   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