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

时间:2014-07-14 22:05:22

标签: 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可以使用空格处理文件夹名称,但在以下情况下会失败:

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

\\/是同一个错误:

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

2 个答案:

答案 0 :(得分:0)

我在我的窗户上做了同样的事情也得到了同样的错误。但是我注意到myprj文件夹是readonly(在属性中)所以我关闭它然后代码工作。

实际上我在c:\上创建的每个文件夹默认都是“只读”。

这不适用于属性为“只读(仅适用于文件夹中的文件)”的空文件夹。“

答案 1 :(得分:0)

我发现这种方法效果很好:

  1. 创建批处理文件myrmdir.bat @echo off RMDIR /S /Q %1

  2. 将此文件放在与代码相同的文件夹中,并使用以下命令调用: //Yes, I can use / instead of \\ and it works myfolder := "c:/temp/folder with space" exec.Command("cmd", "/C", "myrmdir.bat", myfolder).Run()

  3. 希望这会对你有所帮助。如果你有更好的解决方案(尤其是纯Golang解决方案),请告诉我。