如何在Windows CMD中提取最后一个文件夹名称(用于Sublime Build)
解决Sublime Build系统中提取$folder最后一个文件夹名的问题
问题出在Windows批处理的变量延迟扩展机制上:同一行内的%变量%会在命令执行前被预解析,此时myfolder还未被赋值,所以输出为空。以下是两种可行的解决办法:
方法1:启用延迟扩展
修改shell_cmd,开启延迟扩展后用!myfolder!实时引用变量:
"shell_cmd": "cmd /v:on /c \"(for %%f in (\"$folder\") do set \"myfolder=%%~nxf\") && echo !myfolder!\""
cmd /v:on开启延迟扩展,允许用!符号实时读取变量的最新值- 用
cmd /c包裹整个命令,确保所有操作在同一个批处理环境中执行
方法2:直接在for循环内完成操作(无需额外变量)
如果只是需要使用这个文件夹名,可省去变量赋值步骤,直接在for循环里处理:
"shell_cmd": "for %%f in (\"$folder\") do echo %%~nxf"
若要将该名称作为参数传给其他命令,可调整为:
"shell_cmd": "for %%f in (\"$folder\") do your_target_command \"%%~nxf\""
补充说明
%%~nxf是批处理for变量的扩展参数,nx用于提取路径最后一级的名称(文件夹无扩展名时,就是最终需要的文件夹名)- Sublime的
$folder变量会自动处理路径中的空格,用\"$folder\"包裹可避免路径含空格时出现命令解析错误
内容的提问来源于stack exchange,提问作者LA_
相关产品推荐
相关产品推荐

