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

批处理脚本中如何从文件路径提取无后缀文件名?

批处理提取不含路径和后缀的文件名

推荐方法:用for变量内置修饰符

批处理的for变量自带修饰符,能直接提取文件名的指定部分,完全不用手动截取,避免硬编码路径长度的问题:

  • %%~nf:不含路径和后缀的纯文件名(正是你需要的)
  • %%~f:完整路径(对应你代码里的%%f)
  • %%~dpnf:驱动器+路径+不含后缀的文件名
  • %%~xf:文件后缀(含.)

直接修改你的循环代码:

for /r "path/to/dir" %%f in (*.json) do (
    # 直接输出或使用纯文件名
    echo %%~nf
    # 如果要赋值给变量后续使用,结合延迟扩展
    set "filename=%%~nf"
)

修正你的原思路:启用延迟扩展手动截取

如果一定要用字符串截取,需修正语法并正确启用延迟扩展:

  1. 脚本开头开启延迟扩展:setlocal enabledelayedexpansion
  2. 先将完整路径赋值给变量,再对变量做截取操作(不能直接在set里对%%f用截取语法)

修正后的代码:

@echo off
setlocal enabledelayedexpansion

for /r "path/to/dir" %%f in (*.json) do (
    set "fullpath=%%f"
    set "nf=!fullpath:~0,68!"
    set "nf=!nf:~0,-5!"
    echo !nf!
)
endlocal

你之前的问题根源:

  • 错误写法set nf=%%f:~0,68%%:批处理不支持直接对%%f变量做截取后赋值,必须先把%%f存入普通变量
  • 延迟扩展未正确使用:循环内必须用!变量!引用,而非%变量%,否则变量值会在脚本解析阶段被提前替换,导致输出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 01:53:10