首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么测试路径cmdlet在使用环境变量时不正确地报告false?

为什么测试路径cmdlet在使用环境变量时不正确地报告false?
EN

Stack Overflow用户
提问于 2018-04-13 12:54:24
回答 2查看 526关注 0票数 1

我在使用Powershell 4.0的Win 7机器上

代码语言:javascript
运行
复制
PS C:\> $psversiontable

Name                           Value                                                                                                                                                               
----                           -----                                                                                                                                                               
PSVersion                      4.0                                                                                                                                                                 
WSManStackVersion              3.0                                                                                                                                                                 
SerializationVersion           1.1.0.1                                                                                                                                                             
CLRVersion                     4.0.30319.42000                                                                                                                                                     
BuildVersion                   6.3.9600.18728                                                                                                                                                      
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                                                                                                                                
PSRemotingProtocolVersion      2.2 

参见下面的命令行练习。dll存在。环境变量存在并具有正确的路径。当我在Test-Path中使用环境变量时,它不正确地报告$false。当我在Test-Path中使用字符串文字时,它正确地报告了$true

当我使用环境变量时,为什么Test-Path不正确地报告false?

代码语言:javascript
运行
复制
PS C:\> dir "C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin\SmartCard.Runtime.dll"

    Directory: C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin

Mode                LastWriteTime     Length Name                                                                                                                                                  
----                -------------     ------ ----                                                                                                                                                  
-a---         1/13/2012   6:57 PM     131072 SmartCard.Runtime.dll                                                                                                                                 

PS C:\> Write-Host $env:GEMALTO_SMARTCARD_DLL
"C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin\SmartCard.Runtime.dll"

PS C:\> Test-Path $env:GEMALTO_SMARTCARD_DLL

False

PS C:\> Test-Path "C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin\SmartCard.Runtime.dll"
True    
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-13 14:10:09

在打印Write-Host $env:GEMALTO_SMARTCARD_DLL时,您可以看到环境变量GEMALTO_SMARTCARD_DLL包含文字"作为其值的一部分。这是不正确的。例如,在传递到Test-Path$env:GEMALTO_SMARTCARD_DLL.Trim('"')之前,您应该删除它们。

注意:虽然"是文件系统路径的无效字符,但它并不是PowerShell路径的无效字符,因为它并不仅限于文件系统。

代码语言:javascript
运行
复制
New-PSDrive -Name '"C' -PSProvider Variable -Root \
${Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin\SmartCard.Runtime.dll"} = 'Value'
Test-Path $env:GEMALTO_SMARTCARD_DLL
票数 3
EN

Stack Overflow用户

发布于 2018-04-13 14:08:00

您的问题不在于环境变量(它们只是不同驱动器中的变量-- Env:Variable:),而是与环境变量的内容有关。如果要在cmd中创建此变量,则应使用以下语法:

代码语言:javascript
运行
复制
SET "GEMALTO_SMARTCARD_DLL=C:\Program Files(x86)\.."

PowerShell中的参数比批处理参数稍微聪明一些,并且传递变量可以作为参数的全部,而不管它的内容如何。

在特定情况下,变量将引号字符作为内容的一部分,这对Test-Path没有意义

代码语言:javascript
运行
复制
PS C:\> $Env:GEMALTO_SMARTCARD_DLL
"C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.3.0\bin\SmartCard.Runtime.dll"

您可以通过修复环境变量的声明来解决这个问题,也可以在代码中修复它:

代码语言:javascript
运行
复制
$GEMALTO_SMARTCARD_DLL = $Env:GEMALTO_SMARTCARD_DLL -replace '^"' -replace '"$'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49817534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档