给定下面的代码,我如何设置一个变量,我可以用来调用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
2条答案
按热度按时间abithluo1#
$env:Path += "C:\Program Files\7-Zip"
应该是
$env:Path += ";C:\Program Files\7-Zip"
(注意;
),并且它只对当前会话(进程)的剩余部分有效。也就是说,您可以在同一个会话中以
7z ...
的身份调用7-Zip。如果您希望此修改 * 持久化 *,即供今后各届会议使用:
$PROFILE
文件中。Path
环境变量的持久化定义,例如:通过sysdm.cpl
交互Path
并不简单-请参阅this answer。为了执行其名称或路径存储在变量 * 中的命令,您必须通过
&
**调用它们,调用操作符(这是PowerShell中的 * 语法必要性 *):同样的也适用于命令名或路径被引为一个整体 *:
C:\"Program Files"\7-Zip\7z.exe
碰巧在没有 *&
的情况下也能工作,因为参数 * 以 * 一个 * 未加引号的 * 字符串开头。& "C:\Program Files\"7-Zip\7z.exe
不起作用,因为7-Zip\7z.exe
部分将成为 * 单独的参数 * -参见this answer。"C:\Program Files"\7-Zip\7z.exe"
* 需要&
相比之下,
&
的使用是 * 可选的 *,带有 * 逐字的、不加引号的 * 命令名和路径(例如,7z
、C:\tools\7z.exe
)详情请参见this answer。
piztneat2#
请试试这个: