设置以下<div id="content"></div>
<button class="check">Check</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
var GetID = {
a: 0,
toString() {
return this.a++;
}
}
var num = 4;
$(".check").click(function(){
for(i=0; i<num;i++){
$("#content").append("<input id='input"+GetID+"' type='text'><br>");
}
});
</script>
变量以自动查找USB驱动器号,并使用该变量在USB上打开图像不起作用。它在cmd中打印出“G:\ image.png”。
$usbDriveLetter
但是如果我不使用var并在PowerShell脚本中生成“G:\”static,那么图像就可以正常打开。
$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name;
"$usbDriveLetter" + "image.png"
那我在这里做错了什么?我们如何使用ps1脚本动态打开图像?
答案 0 :(得分:1)
组合两个字符串时,会得到一个字符串。如果引用路径("G:\image.png"
),它的行为将相同。
使用Invoke-Item
执行路径:
$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
Invoke-Item -Path ("$usbDriveLetter" + "image.png")
您也可以使用呼叫操作员&
:
$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
& ("$usbDriveLetter" + "image.png")
答案 1 :(得分:1)
Frode F.'s helpful answer提供了有效的解决方案。
对于 时需要&
,PowerShell的调用运算符:
为了执行命令/打开未指定为未引用的文字字符串的文档,您需要&
强>
也就是说,无论何时指定命令名称(或路径)/文档文件名(或路径),都需要 &
:
:作为引用字符串(例如,"G:\image.png"
)
或:作为表达式的结果 (例如("$usbDriveLetter" + "image.png")
;同上$(...)
)
注意:
如果打开文档 (而不是调用可执行文件),您可以使用Invoke-Item
代替&
如果您在文件资源管理器中尝试打开文件夹路径 ,仅 Invoke-Item
可以正常工作。< / p>
至于 为什么,您需要&
:
PowerShell有 两种基本解析模式:
参数模式,与传统的 shell一样
表达式模式,与传统的编程语言类似。
正在运行Get-help about_Parsing
会介绍这些模式。
简而言之, 第一个令牌决定应用哪种模式,以执行/打开某事,必须在参数模式下解析(在表达式模式下,结果只是输出);因此,第一个标记必须是:
&
,在这种情况下,下一个参数 - 可以指定为带引号的字符串或表达式 - 被解释为命令/文档名称或执行/打开的路径。