根据下面的代码,如何设置可用于调用 7z 可执行文件的变量?env:Path
顶部的方法可以工作一次,但必须重新加载终端,否则无法找到命令。Powershell 似乎将其视为字符串,而不是可执行调用。最终,我需要能够从环境中获取这种价值。
# $env:Path += "C:\Program Files\7-Zip"
# works once, then the terminal must be reloaded
$7zip = "C:\Program Files\7-Zip\7z.exe"
$dirAsStr = "C:\Program Files\7-Zip\7z.exe"
$dirAsDir = Get-Item $dirAsStr
$extract_files = "somewhere"
$output = "someplace"
# $dirAsDir a -t7z $output\format_files.7z $extract_files\format.*
# ParserError: Unexpected token 'a' in expression or statement.
# $7zip a -t7z $output\format_files.7z $extract_files\format.*
# ParserError: Unexpected token 'a' in expression or statement.
C:\"Program Files"\7-Zip\7z.exe a -t7z $output\format_files.7z $extract_files\format.*
# works fine
应该是
$env:Path += ";C:\Program Files\7-Zip"
(注意)并且它仅对当前会话(进程)的剩余部分;
有效。也就是说,您可以像
7z ...
在同一会话中一样调用 7-Zip。如果您希望此修改持续存在,即在所有将来的会话中可用:
或者: 将命令放入您的
$PROFILE
文件中。Path
或者:修改注册表中环境变量的持久定义,例如通过交互方式sysdm.cpl
Path
为了执行名称或路径存储在变量中的命令,您必须通过调用运算符调用它们
&
(这是PowerShell 中语法上的必要条件):对于作为整体引用的命令名称或路径也是如此:
C:\"Program Files"\7-Zip\7z.exe
碰巧没有&
,因为参数以不带引号的字符串开头。& "C:\Program Files\"7-Zip\7z.exe
不起作用,因为该7-Zip\7z.exe
部分将成为一个单独的参数- 请参阅此答案。相比之下,
"C:\Program Files"\7-Zip\7z.exe"
需要&
相比之下,使用 of
&
是可选的,带有逐字的、不带引号的命令名称和路径(例如,7z
,C:\tools\7z.exe
)有关详细信息,请参阅此答案。
请尝试这个: