我试图编写一个脚本来测试文件路径的可用性。过程之一是用户必须输入文件路径,或者只是将文件拖到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/