我需要一个脚本来遍历目录,查找是否存在带有尾随空格的文件,如果存在则记录它存在,然后重命名该文件。我被困在最重要的部分:查找文件是否存在。
判断文件是否存在的正常方法是
Test-Path -Path somepath
但是,如果您需要测试是否存在带有尾随空格的文件,则此方法不起作用。当给somepath
定文件名中带有尾随空格的文件的已知路径时,所有这些都会失败:
Test-Path -Path somepath
Test-Path -Path 'somepath '
Test-Path -Path "somepath "
Test-Path -LiteralPath somepath
Test-Path -LiteralPath 'somepath '
Test-Path -LiteralPath "somepath "
Powershell 如何测试名称中带有空格的文件?
答案1
我发现问题不是 Powershell,而是 Windows。但是,Windows 确实有一种方法可以强制将文字字符串添加\\?\
到路径前面:
对于文件 I/O,
\\?\
路径字符串的“ ”前缀会告知 Windows API 禁用所有字符串解析,并将其后的字符串直接发送到文件系统。例如,如果文件系统支持较大的路径和文件名,则可以超出 Windows API 强制执行的 MAX_PATH 限制。
我在 Windows 路径文档中找到了这一点在 Microsoft Docs 网站上。 将其更改为在开头somepath
包含使得 PowerShell 对带有尾随空格的字符串按照预期方式运行。\\?\