我正在尝试使用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
答案 0 :(得分:0)
解决了。您还需要在变量周围加上引号。示例:
$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