.TargetPath 似乎不接受变量?

.TargetPath doesn't seem to take Variables?

我正在尝试使用 Powershell ISE 创建文件夹的快捷方式,显然,与我发现的所有示例相反,$Shortcut.TargetPath 似乎不想分配变量,或者与一个互动。

我尝试在引号中使用文字路径 ($Shortcut.TargetPath = "\thisis\where\the\path\goes\"),这似乎可行,但是一旦我使用变量,它就会变成空值 ($Shortcut.TargetPath = $TargetDir)

我试过添加它,我试过先用引号写一个值然后覆盖那个值,我试过用引号写一个值然后加上那个值,它总是变成空。

$WScriptShell = New-Object -ComObject WScript.Shell

$TargetDir = "D:\Files\"
$SourceDir = "C:\Windows\"

$Shortcutid1 = $TargetDir + '.lnk'
$Shortcutid = $SourceDir + '.lnk'

$Shortcut = $WScriptShell.CreateShortcut($Shortcutid1)
$Shortcut.TargetPath = $TargetDir
$Shortcut.TargetPath
$TargetDir

$Shortcut1 = $WScriptShell.CreateShortcut($Shortcutid)
$Shortcut1.TargetPath = "C:\Windows\"
$Shortcut1.TargetPath

现在,我希望发生的事情是:

D:\Files\
D:\Files\
C:\Windows\

相反,我得到了输出:

D:\Files\
C:\Windows\

$Shortcut.TargetPath这一行只是空的,但不是空的。

我用if([string]::IsNullOrEmpty($Shortcut.TargetPath)) {"empty"} else {"wat"}测试了一下,结果是wat,奇怪的是,里面似乎至少有东西? 编辑:Powershell 版本为版本 5.1.17763.503

解决了。您还需要在变量周围加上引号。示例:

$WScriptShell = New-Object -ComObject WScript.Shell

$TargetDir = "D:\Files\"
$SourceDir = "C:\Windows\"

$Shortcutid1 = $TargetDir + '.lnk'
$Shortcutid = $SourceDir + '.lnk'

$Shortcut = $WScriptShell.CreateShortcut($Shortcutid1)

$Shortcut.TargetPath = "$TargetDir"

$Shortcut.TargetPath
$TargetDir

$Shortcut1 = $WScriptShell.CreateShortcut($Shortcutid)
$Shortcut1.TargetPath = "C:\Windows\"
$Shortcut1.TargetPath

本次预期输出与实际输出相符。 '' 如果您要在代码中发布 $,显然会忽略变量。 "" 但是允许识别变量。 如果您想添加更多变量,我建议您事先合并它们示例:

$a = "$TargetDir" + "\yourfolder" $Shortcut.TargetPath = "$a"

导致输出:

D:\Files\yourfolder
D:\Files\
C:\Windows