如何删除路径中的空格?

时间:2012-07-25 06:50:45

标签: c# process path whitespace command-line-arguments

我必须启动放在Program Files中的进程。但问题是Process.Start没有在路径中占用空间。

Process regeditProcess = Process.Start("regedit.exe", "/s C:\\Program Files\\Test Folder\\sample.reg");

路径:

C:\\Program Files\\Test Folder\\sample.reg

“程序文件”中的程序和文件之间有一个空格。 多数民众赞成我的问题如何避免空间?

4 个答案:

答案 0 :(得分:3)

您应该在引号(“)中传递包含空格的命令行参数,如下所示:

Process regeditProcess = Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");

答案 1 :(得分:3)

Process.Start不是问题,问题是regedit.exe不接受参数中的空格。把它写成引号:

Process.Start("regedit.exe", "/s \"C:\\Program Files\\Test Folder\\sample.reg\"");

另外,您应该使用%ProgramFiles%或类似内容来获取程序文件文件夹而不是硬编码"C:\\Program Files"

答案 2 :(得分:1)

您可以执行以下操作来获取程序文件

Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)

这是更详细的代码

if(Environment.Is64BitOperatingSystem)
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)
}
else
{
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles)
}

答案 3 :(得分:1)

正确的做法是引用包含空格的路径。所以参数字符串应该是这样的:

"/s \"C:\\Program Files\\Test Folder\\sample.reg\""

虽然在使用路径时,通常应该始终使用逐字文字字符串。

@"/s ""C:\Program Files\Test Folder\sample.reg"""

否则,您可以使用8.3名称转换路径。我不知道在框架中为你做这个的任何方法,但规则很简单。如果您有一个长度超过6个字符的长名称,则取前6个非空格字符并使用波浪号(~)后跟一个数字(通常以1开头)附加。如果多个文件具有相同的6个字符,则该数字按字母顺序递增。所以在你的情况下可以写成:

@"/s C:\Progra~1\TestFo~1\sample.reg"