Powershell 中的 7zip 一直显示 "Too long switch" 或 "Too short switch"
7zip in Powershell keeps saying "Too long switch" or "Too short switch"
使用此脚本尝试了很多组合,使用 7zip 将大量文件压缩成单个文件,但我总是出错。
Get-ChildItem *.smc | ForEach-Object { 7z a -yx9 -x9 "$_.Name+.7z" $_.Name }
不断提出“开关太长”或“开关太短”的问题。这是怎么回事?
您的命令有两个不同的问题:
您在 "..."
中错误地嵌入了 属性 访问 $_.Name
:您必须使用 "$($_.Name)+.7z"
- 注意 [=13= 的使用], subexpression operator.
- 简而言之:为了在可扩展字符串 (
"..."
) 中嵌入 表达式 ,您必须将它们包含在 $(...)
中。值得注意的是,这包括 属性 和索引访问(例如,$($var.property)
、$($var[0])
)。只有变量 作为一个整体 不需要这个(例如,$var
、$env:USERNAME
)。有关详细信息,请参阅 this answer。
您的选项旨在指定文件分析级别和压缩级别,这意味着它们必须作为选项 arguments 传递给 -m
option.
- 因此,使用
-myx9 -mx9
使用此脚本尝试了很多组合,使用 7zip 将大量文件压缩成单个文件,但我总是出错。
Get-ChildItem *.smc | ForEach-Object { 7z a -yx9 -x9 "$_.Name+.7z" $_.Name }
不断提出“开关太长”或“开关太短”的问题。这是怎么回事?
您的命令有两个不同的问题:
您在
"..."
中错误地嵌入了 属性 访问$_.Name
:您必须使用"$($_.Name)+.7z"
- 注意 [=13= 的使用], subexpression operator.- 简而言之:为了在可扩展字符串 (
"..."
) 中嵌入 表达式 ,您必须将它们包含在$(...)
中。值得注意的是,这包括 属性 和索引访问(例如,$($var.property)
、$($var[0])
)。只有变量 作为一个整体 不需要这个(例如,$var
、$env:USERNAME
)。有关详细信息,请参阅 this answer。
- 简而言之:为了在可扩展字符串 (
您的选项旨在指定文件分析级别和压缩级别,这意味着它们必须作为选项 arguments 传递给
-m
option.- 因此,使用
-myx9 -mx9
- 因此,使用