使用 -p 在 Powershell 中更正别名命令的语法?

Correct syntax for alias command in Powershell with -p?

我同时使用 Powershell 和 7zip:

$passwd = "password123"
set-alias sz "$env:ProgramFiles-Zipz.exe" 
sz a -t7z -sfx'7z.sfx' -ppasswordstring $execname $ssftxtname

结果的密码为 passwordstring。如何替换最后一行以便它使用 $passwd 变量?这个:

sz a -t7z -sfx'7z.sfx' -p$passwd $execname $ssftxtname

似乎没有给出正确的结果,因为密码输入失败。我认为这是因为有特定的语法要使用?

您应该将 7-zip 文件夹添加到您的 PATH 环境变量中以简化操作:

#find the 7-zip folder path
zPath = (Get-ChildItem "C:\Program Files","C:\Program Files (x86)" -Include "7-zip" -Recurse -ErrorAction SilentlyContinue).FullName

#add it to PATH environment variable
$env:Path += ";zPath;"

然后您可以 运行 您的 7z 直接命令。

当你使用

sz a -t7z -sfx'7z.sfx' -p$passwd $execname $ssftxtname

您实际上是将密码设置为由以下字符组成的 7 个字符的字符串:$, p,a,s,s,w,d.

PowerShell 正在将其启发式方法应用于 "help" 你,认为字符串中间的美元符号可能 不是 对变量的引用。你可以简单地通过引用整个论点来说服它:

sz a -t7z -sfx'7z.sfx' "-p$passwd" $execname $ssftxtname

这样,它会将密码设置为 $passwd 变量的内容。

请注意,如果您的启动配置文件中有@KeithHill 方便的 PSReadLine 模块,您实际上会在键入时看到您有字符串还是变量。请注意以下三种情况。第一个是您尝试过的,但字符是按字面意思提取的。在第二个或第三个变体中添加引号表明 $passwd 是一个活动变量。