powershell - Powershell带引号问题的文件路径

标签 powershell

我试图编写一个脚本来测试文件路径的可用性。过程之一是用户必须输入文件路径,或者只是将文件拖到Powershell命令提示符下。

在这个过程中
用户将输入文件路径,例如 C:\ Program Files \ 7-Zip \ 7z.exe ,该字符串将成为 $ filePath 变量的值,该变量将用作Test-Path命令的参数。

但是有时,用户只是将文件拖到Powershell命令提示符下,以便字符串将带有一对引号,如图1所示。
(“C:\ Program Files \ 7-Zip \ 7z.exe”)
Picture 1

然后,您将看到当我尝试使用带有$ filePath变量的Test-Path命令测试路径,而$ filePath的值(字符串)包含一对一对引号时,即使该路径也始终为False存在并且有效。
但是,当我使用相同的Test-Path命令而不使用变量时(我的意思是仅将文件路径复制并粘贴到命令中),它可以正常工作。

有点奇怪!

我尝试通过键盘在变量中键入文件路径,而不是将文件拖到Powershell命令提示符中。 (不带引号)
然后使用相同的方法测试文件路径(使用变量作为文件路径)。它工作正常。

Picture 2

我不明白他们不是同一回事吗?

什么时候
$filePath = "C:\Program Files\7-Zip\7z.exe"
以下两个命令应具有相同的结果!为什么不是?

Test-Path -Path $filePath
Test-Path -Path "C:\Program Files\7-Zip\7z.exe"

最佳答案

在拖放的情况下,如果路径中没有空格,它将返回true。如果有空格,那么PowerShell会在其周围加上引号。在这种情况下,PowerShell实际上会将路径视为"C:\Program Files\7-Zip\7z.exe"
您可以做的是使用-replace运算子,例如:

Test-Path -path ($filepath -replace '"', "") -PathType Leaf



正如@Josefz在评论中所建议的,您还可以使用Trim()方法,例如-
Test-Path -path ($filepath.Trim('"')) -PathType Leaf

不能完全解释您的问题,但是您可以将其用作解决方法。

关于powershell - Powershell带引号问题的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523319/

相关文章:

powershell - 我可以从XAML构建模板中访问特定的MSBuild参数吗?

c# - 在 asp.net mvc 中执行 Powershell 和 Powercli 命令时如何设置超时

powershell - 如何将数组参数传递给 powershell -file?

powershell - 在 PowerShell 中将位置设置为变量

excel - Powershell 4.0 和 Excel 2013 |错误 |周而复始

xml - 如何使用 Powershell 枚举 XML 元素的属性

PowerShell:检测脚本函数中的错误

powershell - 如果在确认消息框中按否,如何在 powershell 中停止事件

powershell - 如何更改 Add-Blob Azure cmdlet 的超时值?

git - 发出 git log 命令时 PowerShell 挂起