如何在命令行启动参数上转义文件路径中的空格

Posted 森明帮大于黑虎帮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在命令行启动参数上转义文件路径中的空格相关的知识,希望对你有一定的参考价值。

如下代码,在启动参数中传一个路径,如果路径没有空格,像这样的路径 D:\\protobuf-3.21.5 直接传过去就行,但有一些特例,如果路径中有空格的话像这样的路径 D:\\visual stdio 2017代码 ,编译时就会发生崩溃,什么原因呢?原因就是仔细观察中间有两个空格。在程序中调用cmd命令打开一个文件,而文件路径带有空格,如果直接把路径传给cmd,那么cmd就会把路径空格前面的部分当做是一个参数,空格后当做另一个参数,导致程序出错,解决方法是把传入的参数前后添加双引号。

“D:\\visual stdio 2017” 这样就可以了。

#include"ReadFile.h"
#include"ReadFileRow.h"

#include"WriteToCsv.h"

int main(int argc, char** argv) 
	if (argc > 1)
		ReadFile rd;
		std::string str(argv[1]);
		rd.Test(str);
		ReadFileRow rf;
		rf.Test(str);
	
	else
		std::cerr << "error:need a dir\\n";
		return -1;
	

	return 0;


  • 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。

  • 命令行认为您正在尝试查找名为的文件 并说它“找不到指定的路径”。

在 Windows 上转义空间的三种方法

您可以通过三种不同的方式在 Windows 上转义文件路径:

  • 通过将路径(或路径的一部分)括在双引号 ( ” ) 中。
  • 通过在每个空格前添加插入符 (^)。(这仅适用于命令提示符/CMD,并且似乎不适用于每个命令)。
  • 通过在每个空格前添加重音符号 (`)。(这仅适用于 PowerShell,但它始终有效)。

我们将向您展示如何使用每种方法。

  • 用引号 ( ” ) 将路径括起来。
    • 确保 Windows 正确处理文件路径的标准方法是将其括在双引号 (") 字符中。例如,使用上面的示例命令,我们只需运行以下命令:
    • 键入“C:\\Test Folder\\Test File.txt” 。

如果您愿意,您实际上可以用引号将路径的一部分括起来。例如,假设您在该文件夹中有一个名为 File.txt 的文件。您可以运行以下命令:

键入 C:“测试文件夹”\\File.txt。

但是,这不是必须的——在大多数情况下,您可以只在整个路径周围使用引号。

以上是关于如何在命令行启动参数上转义文件路径中的空格的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止我的命令行参数在 Maven 插件中被转义?

如何转义变量中的特殊字符以在 bash 中提供命令行参数

如何让 perl 正确传递具有多个参数和复杂文件路径(空格和符号)的命令行参数?

文件路径作为命令行参数

如何从 C# 中的文件路径中去除引号和命令行参数?

如何从C#中的文件路径中删除引号和命令行参数?