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

如何使用for循环根据已有文件名批量创建对应名称的目录

批量根据txt文件名创建对应去后缀目录的解决方法

错误写法的问题

你之前尝试的几个命令都犯了同一个核心问题:没有移除文件名末尾的.txt后缀,最终生成的目录名都会保留.txt,和你需要的纯文件名前缀的目录名不符。额外的多余大括号、主动追加.txt的写法属于逻辑错误,只会生成完全不符合预期的目录。

可用实现方案

方案1:Bash原生参数扩展(最高效推荐)

使用Bash内置的参数扩展语法直接移除后缀,无需调用额外命令,兼容性好:

for f in *.txt; do mkdir -- "${f%.txt}"; done

说明:

  • ${f%.txt}作用是删除变量f末尾匹配到的.txt后缀,比如red.txt处理后就变成red
  • 双引号包裹变量是为了兼容文件名带空格、特殊字符的场景
  • --参数是为了避免文件名以-开头时,被mkdir误识别为命令参数
  • 如果需要忽略目录已存在的报错,或者要创建嵌套层级的目录,可以给mkdir加-p参数,改为mkdir -p -- "${f%.txt}"

注意:如果当前目录不存在任何.txt后缀的文件,Bash默认会把*.txt原样作为变量值,会导致生成名为*.txt的异常目录。可以先执行shopt -s nullglob开启空匹配模式,没有匹配文件时循环会直接跳过,避免异常。

方案2:basename命令实现(跨Shell兼容)

如果你使用的不是Bash环境,可以调用basename命令处理后缀:

for f in *.txt; do mkdir -- "$(basename -- "$f" .txt)"; done

内容的提问来源于stack exchange,提问作者Kourosh Taheri-Golvarzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:15:06