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

如何在Batch脚本中将目录下的文件夹与文件名分配至不同变量?

实现对应的Windows Batch脚本

我已经帮你写出了完全匹配你Unix脚本功能的Batch脚本,能够读取changed.txt中的每一行路径,提取你需要的三个字段并拼接成逗号分隔的字符串,最终输出和你预期一致的结果。

@echo off
setlocal enabledelayedexpansion

:: 初始化变量
set "PACKAGE="
set "BRANCH="
set "UPDATEFOLDER="

:: 逐行读取changed.txt文件内容
for /f "delims=" %%x in (changed.txt) do (
    :: 提取release/之后的文件名(对应Unix中的sed处理)
    set "line=%%x"
    set "filename=!line:*release/=!"
    :: 去除首尾空格(对应Unix中的sed去空格)
    for /f "tokens=*" %%a in ("!filename!") do set "filename=%%a"
    :: 拼接PACKAGE变量
    if defined PACKAGE (
        set "PACKAGE=!PACKAGE!,!filename!"
    ) else (
        set "PACKAGE=!filename!"
    )

    :: 提取第1个目录(对应Unix中的cut -d "/" -f1)
    for /f "tokens=1 delims=/" %%b in ("%%x") do set "branch=%%b"
    :: 拼接BRANCH变量
    if defined BRANCH (
        set "BRANCH=!BRANCH!,!branch!"
    ) else (
        set "BRANCH=!branch!"
    )

    :: 提取第5个目录(对应Unix中的cut -d "/" -f5)
    for /f "tokens=5 delims=/" %%d in ("%%x") do set "folder=%%d"
    :: 拼接UPDATEFOLDER变量
    if defined UPDATEFOLDER (
        set "UPDATEFOLDER=!UPDATEFOLDER!,!folder!"
    ) else (
        set "UPDATEFOLDER=!folder!"
    )
)

:: 输出结果
echo PACKAGE is %PACKAGE%
echo BRANCH is %BRANCH%
echo UPDATEFOLDER is %UPDATEFOLDER%

endlocal

关键细节说明

  • 延迟变量扩展:启用setlocal enabledelayedexpansion是Batch处理循环变量的核心——循环内部修改变量后,必须用!var!代替%var%才能读取到实时更新的值。
  • 提取release后的文件名:用!line:*release/=!实现字符串替换,直接砍掉release/之前的所有内容;再用for /f "tokens=*"去除首尾空格,完美对应Unix脚本里的sed去空格操作。
  • 提取指定目录字段:用for /f "tokens=N delims=/"分割路径,tokens=1取第一个目录(branches),tokens=5取第五个目录(ADAdapter),和Unix的cut -d "/" -fN效果完全一致。
  • 拼接逗号分隔字符串:每次循环判断变量是否已定义,有值就追加,新内容,无值则直接赋值,从根源避免了开头出现多余逗号,比Unix最后用sed去逗号的方式更高效。

测试结果

把你的changed.txt放在脚本同目录下运行,会得到和你预期完全一致的输出:

PACKAGE is post_commit_hook.zip,post_commit_hook.zip,post_commit_hook.zip,post_commit_hook.zip
BRANCH is branches,branches,branches,branches
UPDATEFOLDER is ADAdapter,ADAdapter,ADAdapter,ADAdapter

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:11:26