为了解决这个问题,您可以使用以下代码(这不是非常优雅的解决方案,但它会相当好地工作)。请注意,我正在使用
c:\temp
进行测试,而不是您的主目录,但其概念是相同的。
alias cloud=mklink /J "C:\temp\OneDrive - chjensen\$1" $2 $3 $4 $5 $6 $7 $8 $9
这是MS cmd命令:
cloud sublime "C:\Program Files\Sublime Text 3\Data\Packages"
这是调试别名的简单方法,使用
echo
命令将其输出到终端:
alias cloudp=echo mklink /J "C:\temp\OneDrive - chjensen\$1" $2 $3 $4 $5 $6 $7 $8 $9
正如你所提到的,你遇到的问题是
$2
被翻译成了
"C:\Program
,
$3
=
Files\Sublime
等。通过这种不太优雅的解决方案,它将把它们全部重新组合在一起,包括空格和最后一个双引号后面可能存在的一些尾随空格,我们并不关心。
你可以尝试使用脱字符号来转义每个空格,例如
C:\Program^ Files\Sublime^ Text^ 3\Data\Packages
,但我认为它不会起作用,而且你也不想每次都记得加上脱字符号。
如果你可以从OneDrive路径中删除空格(空格非常讨厌,特别是在Microsoft命令提示符中),那么你可以通过以下方式更优雅地解决这个问题:
alias cloud2=mklink /J C:\temp\OneDrive_chjensen\$*
< p > < code > $ * 意味着在
cloud
命令之后的所有内容。
根据我上面所说的,实际上我建议...如果可能的话,请过渡到在Cmder中使用PowerShell控制台。这比使用基于doskey的别名要简单得多。我写了一个方法,在此stackoverflow answer中介绍如何将.ps1
文件引入到PowerShell控制台中。
我创建了一个示例,其中包含一些PowerShell代码(具体取决于您的PowerShell版本),可用于执行相同的操作,但具有更多的错误检查和灵活性。有关PowerShell符号链接的更多信息,请参见link。
此外,请考虑使用$env:USERPROFILE
而不是C:\Users\chjensen
,使脚本在其他计算机上更易重用(还有,$env:ProgramFiles
而不是c:\Program Files
)。
function Get-DestPath
{
[CmdletBinding()]
param ( [AllowNull()][String] $DestPath )
if (!$DestPath)
{
$DestPath = 'C:\temp\OneDrive - chjensen\'
}
return $DestPath
}
function New-SymbolicLinkItem
{
[CmdletBinding(SupportsShouldProcess=$true)]
param
(
[Parameter(Mandatory=$true)][String] $NewLinkName
,[Parameter(Mandatory=$true)][String] $ItemToLink
,[AllowNull()][String] $DestPath
)
$DestPath = Get-DestPath -DestPath $DestPath
Write-Verbose -Message ('New Link: NewLinkName={0}, ItemToLink={1}, DestPath={2}' -f $NewLinkName, $ItemToLink, $DestPath)
if ($PSCmdlet.ShouldProcess($ItemToLink, 'New-SymbolicLinkItem'))
{
try
{
New-Item -ItemType SymbolicLink -Path $DestPath -Name $NewLinkName -Value $ItemToLink -ErrorAction Stop
}
catch
{
('Error creating link: {0}, line number: {1}' -f $_, $_.InvocationInfo.ScriptLineNumber)
}
}
}
Set-Alias -Name cloud -Value New-SymbolicLinkItem
您可以在 PowerShell 控制台中与别名相同地使用此命令:
cloud sublime "C:\Program Files\Sublime Text 3\Data\Packages"
希望这有所帮助。如果您有任何问题,请告诉我。