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

如下代码,在启动参数中传一个路径,如果路径没有空格,像这样的路径 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。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森明帮大于黑虎帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值