Windows 命令提示符和PowerShell等命令行环境使用空格分隔命令和参数,但文件和文件夹名称也可以包含空格。要指定带有空格的文件路径,您需要“转义”它。
命令行 101:为什么必须转义空格
“转义”字符会改变其含义。例如,转义空格将导致 shell 将其视为标准空格字符,而不是分隔命令行参数的特殊字符。
例如,假设您有一个要查看其内容的文本文件。您可以使用 type 命令执行此操作。假设文本文件位于,命令提示符中的以下命令将显示其内容:
C:\Test\File.txt
键入 C:\Test\File.txt
伟大的。现在,如果您有相同的文件怎么办?如果您尝试运行以下命令,它将不起作用——文件路径中的那些空格会妨碍您。
C:\Test Folder\Test File.txt
键入 C:\Test Folder\Test File.txt
命令行认为您正在尝试查找名为的文件 并说它“找不到指定的路径”。
C:\Test
在 Windows 上转义空间的三种方法
您可以通过三种不同的方式在 Windows 上转义文件路径:
-
通过将路径(或路径的一部分)括在双引号 ( ” ) 中。
-
通过在每个空格前添加插入符 (^)。(这仅适用于命令提示符/CMD,并且似乎不适用于每个命令。)
-
通过在每个空格前添加重音符号 (`)。(这仅适用于 PowerShell,但它始终有效。)
我们将向您展示如何使用每种方法。
用引号 ( ” ) 将路径括起来
确保 Windows 正确处理文件路径的标准方法是将其括在双引号 (") 字符中。例如,使用上面的示例命令,我们只需运行以下命令:
键入“C:\Test Folder\Test File.txt”
如果您愿意,您实际上可以用引号将路径的一部分括起来。例如,假设您在该文件夹中有一个名为 File.txt 的文件。您可以运行以下命令:
键入 C:\"测试文件夹"\File.txt
但是,这不是必须的——在大多数情况下,您可以只在整个路径周围使用引号。
此解决方案适用于传统的命令提示符 (CMD) 环境和 Windows PowerShell。
有时:使用插入字符转义空格 (^)
在命令提示符中,插入符号 ( ^ ) 可以让您从理论上转义空格。只需在文件名中的每个空格之前添加它。(您会在键盘的数字行中找到此字符。要键插入字符,请按 Shift+6。)
问题是:虽然这应该有效,而且有时确实有效,但并非一直有效。命令提示符对这个角色的处理很奇怪。
例如,使用我们的示例命令,您将运行以下命令,但它不起作用:
键入 C:\Test^ 文件夹\Test^ File.txt
另一方面,如果我们尝试通过在命令提示符中输入文件路径直接打开文件,我们可以看到插入符号正确地转义了空格:
C:\Test^ 文件夹\Test^ File.txt
那么它什么时候起作用呢?好吧,根据我们的研究,它似乎适用于某些应用程序,而不适用于其他应用程序。您的里程可能会因您使用的命令而异。命令提示符对这个角色的处理很奇怪。如果您有兴趣,请尝试使用您正在使用的任何命令 - 它可能有效,也可能无效。
为了保持一致性,我们建议您在命令提示符中使用双引号,或者切换到 PowerShell 并使用下面的重音方法。
PowerShell:使用重音符号 ( ` )
PowerShell 使用重音符 ( ` ) 字符作为其转义字符。只需在文件名中的每个空格之前添加它。(您会在键盘上的 Tab 键上方和 Esc 键下方找到此字符。)
键入 C:\Test` 文件夹\Test` File.txt
每个重音字符都会告诉 PowerShell 转义后面的字符。
请注意,这只适用于 PowerShell 环境。您必须在命令提示符中使用插入符号。
如果您熟悉 Linux 和 macOS 等类 UNIX 操作系统,您可能习惯于在空格前使用反斜杠 (\) 字符来转义它。Windows 将此用于普通文件路径,因此它不起作用 - 插入符号 ( ^ ) 和重音符 ( ` ) 字符是 Windows 版本的反斜杠,具体取决于您使用的命令行 shell。