You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言os.Mkdir在Windows创建文件夹报文件名语法错误求助

问题根因

报错的核心原因是跨平台换行符差异导致的非法文件名字符:
bufio.Reader.ReadString('\n')在Windows系统下读取用户输入时,返回的字符串末尾会携带\r\n(回车+换行)两个字符,代码没有处理多余的\r(ASCII码13,回车符),而\r属于Windows文件系统明确禁止的文件/文件夹命名字符,直接拼接进文件夹名就会触发语法错误。
你提供的报错日志里,文件夹名20220610133713_TEST后单独换行才出现冒号,就是字符串末尾藏的\r在打印时把光标拉回行首导致的,是这个问题的典型特征。
之前你试了改绝对路径、相对路径都没用,因为问题根本不在路径格式,而在你拼接的hostname字符串末尾藏了不可见的非法控制符。

修复方案
  • 读取输入后,统一用strings.TrimSpace()去除字符串首尾的空格、换行、回车等不可见空白字符,不要手动按固定长度截断,避免跨平台换行符差异带来的兼容问题。

修正后的可运行代码如下:

reader := bufio.NewReader(os.Stdin)
fmt.Print("Hostname: ")
hostname, _ := reader.ReadString('\n')
// 关键步骤:清除首尾的换行、回车、多余空白
hostname = strings.TrimSpace(hostname)

now := time.Now().Format("20060102150405")
folderName := fmt.Sprintf("%s_%s", now, hostname)

err := os.Mkdir(folderName, os.ModePerm)
if err != nil {
    log.Fatal(err)
}
  • 你之前调用cmd.exe执行mkdir能临时绕过,是因为cmd在解析传入参数时,会自动过滤掉末尾的\r这类不可见控制符,属于歪打正着,不是规范解决方案,不建议长期使用。
  • 额外注意:Windows系统下文件/文件夹名还禁止包含/ \ : * ? " < > |这几个字符,如果后续输入的hostname可能携带上述字符,还需要额外加一层字符替换过滤,否则依然会触发命名报错。

内容的提问来源于stack exchange,提问作者MeMario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:30:55