Path 如何删除名称中有空格的文件夹(Golang)

Path 如何删除名称中有空格的文件夹(Golang),path,go,Path,Go,以下代码在windows中工作: //suppose I have a fname folder in c:\temp mydir := "C:\\temp\\dname" cmd, e := exec.Command("cmd", "/C", " rmdir /S /Q", mydir).Output() 但如果文件夹名称中有空格,则会失败,如: mydir := "C:\\temp\\name with space" Golang os.RemoveAll可以处理带有空格的文件夹名称,但

以下代码在windows中工作:

//suppose I have a fname folder in c:\temp
mydir := "C:\\temp\\dname"
cmd, e := exec.Command("cmd", "/C", " rmdir /S /Q", mydir).Output()
但如果文件夹名称中有空格,则会失败,如:

mydir := "C:\\temp\\name with space"
Golang os.RemoveAll可以处理带有空格的文件夹名称,但在以下情况下会失败:

C:\> mkdir myprj
C:\> cd myprj
C:\myprj> git init
//add some file
C:\myprj> git add .
C:\myprj> git commit -m "Add my files"
//
//This won't work
err := os.RemoveAll("C:/myprj")
关于如何使用Go在windows中完全删除文件夹,有什么想法吗

更新1 \\or/是相同的错误:

func main() {
    if e := os.RemoveAll("c:\\temp\\myprj"); e != nil {
        fmt.Println(e)
    }
}
//OUTPUT
remove c:\temp\myprj\.git\objects\2b\018ef36e172ae05842a9326fc73f1c8baa3254: Access is denied.
但我可以使用以下命令删除文件夹:

C:\> rmdir /S /Q c:\temp\myprj
// or from windows file explore without any problem

我在我的windows上做了同样的事情,也犯了同样的错误。但是我注意到myprj文件夹在属性中是只读的,所以我关闭了它,然后代码就可以工作了

实际上,我在c:\上创建的每个文件夹在默认情况下都是只读的


这不适用于空文件夹。属性显示只读适用于文件夹中的文件。

我发现此方法很有效:

创建批处理文件myrmdir.bat: @回音 RMDIR/S/Q%1

将此文件与代码放在同一文件夹中,并使用以下命令调用它: //是的,我可以使用/而不是\\,它可以工作 myfolder:=c:/temp/带空格的文件夹 exec.Commandcmd,/C,myrmdir.bat,myfolder.Run


希望这对你有帮助。如果你有更好的解决方案。纯Golang解决方案请告诉我。

RemoveAll代码看起来很接近;我不在Windows上,但是如果你发布RemoveAll得到的特定错误,了解更多信息的人可以进行调试。您可能还想尝试RemoveAll,但使用C:\\。。。而不是C:/…问题可能是您尝试删除的目录也是命令提示符的当前目录?i、 例如,当您在c:\myprj中时,您试图删除c:\myprj。在Unixy世界中,我遇到过类似的问题。您有删除该目录的权限吗?文件是只读的吗?是的,你是对的。.git\objects文件夹中的每个文件都是只读的。但是我可以运行rmdir来删除它们,没有任何问题。另外,我在c:\myprj文件夹外运行代码。提示:始终使用正斜杠/in-Go源代码。Windows理解这一点,因为它与Posix兼容。如果您不需要双反斜杠\\,字符串将更简单。即使我关闭了文件夹c:\myprj上的只读属性,但如果我git提交了某些内容,则.git\objects文件夹中将有只读文件。有没有办法让exec.Command使用文件夹名中的空格,这样我就可以使用rmdir删除所有文件。或者有没有办法删除Golang中的Readonly属性?对不起,我没有仔细阅读OP的第一部分。这应该可以工作:attrib-rc:\temp谢谢。它应该是exec.Commandcmd,/C,attrib-R,C:\\任何带有空格的文件夹,但它仍然不能与里面的空格一起工作。事实上,我已经找到了一个解决方法来做这件事,如下答案。