要解决此问题,您可以使用以下代码(这不是一个非常优雅的解决方案,但它会很好地工作)。请注意,我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 cmd 提示符下),您可以通过以下方式更优雅地解决这个问题:
alias cloud2=mklink /J C:\temp\OneDrive_chjensen\$*
$*
表示命令之后的所有内容cloud
。
鉴于我上面所说的,我实际上会建议......
如果可能的话,过渡到在 Cmder 中使用 PowerShell 控制台。这将比使用基于 doskey 的别名简单得多。我.ps1
在这个 stackoverflow答案中写了一个用于将文件拉入 PowerShell 控制台的方法。
我创建了一个 PowerShell 示例,您可以使用它(取决于您的 PowerShell 版本)来做同样的事情,但具有更多的错误检查和灵活性。有关 PowerShell 符号链接的更多信息,请参阅此链接。
此外,考虑使用$env:USERPROFILE
而不是C:\Users\chjensen
使脚本在其他机器上更可重用(也,$env:ProgramFiles
而不是c:\Program Files
)。
function Get-DestPath
{
[CmdletBinding()]
param ( [AllowNull()][String] $DestPath )
if (!$DestPath)
{
# set to default
$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"
我希望这个对你有用。如果您有任何问题,请告诉我。