.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
我正在尝试使用 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