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

如何编写自动遍历唯一硬件名称执行sqlcmd导出CSV的批处理脚本

批处理自动遍历硬件名称导出CSV实现方案

实现思路

  1. 先通过sqlcmd执行distinct查询拉取全量唯一硬件名称,输出到临时纯文本文件
  2. 用批处理for /f循环读取临时文件的每一行硬件名称
  3. 逐个将硬件名称代入导出命令执行,输出对应CSV文件
  4. 所有任务执行完成后自动删除临时文件

完整脚本

@echo off
setlocal enabledelayedexpansion

:: ************************** 请修改以下连接配置 **************************
set "sql_server=你的数据库实例地址"
set "sql_db=你的数据库名"
set "sql_user=数据库用户名"
set "sql_pwd=数据库密码"
:: 日期格式处理为yyyyMMdd,避免文件名出现非法字符
set "date_str=%date:~0,4%%date:~5,2%%date:~8,2%"
:: 临时文件存储路径
set "tmp_name_list=tmp_hardware_names.txt"
:: ***********************************************************************

:: 步骤1:拉取所有唯一硬件名称到临时文件
sqlcmd -S %sql_server% -d %sql_db% -U %sql_user% -P %sql_pwd% ^
 -h -1 -W -Q "set nocount on; select distinct attribute from [table] where attribute is not null;" ^
 > %tmp_name_list%

:: 步骤2:循环遍历每个硬件名称执行导出
for /f "delims=" %%n in (%tmp_name_list%) do (
    set "hardware_name=%%n"
    echo 正在导出:!hardware_name!
    :: 执行查询导出,此处可根据需求调整select字段、where条件,需要模糊匹配可把=替换为like
    sqlcmd -S %sql_server% -d %sql_db% -U %sql_user% -P %sql_pwd% ^
     -W -Q "set nocount on; select somedata from [table] where attribute = '!hardware_name!';" ^
     > "!hardware_name!_%date_str%.csv"
)

:: 步骤3:清理临时文件
del %tmp_name_list%
echo 所有硬件数据导出完成
pause
endlocal

关键参数说明

  • sqlcmd 参数 -h -1:关闭查询结果表头输出,避免临时文件出现多余的标题行
  • sqlcmd 参数 -W:自动去掉查询结果字段前后的空格,保证硬件名称纯净
  • set nocount on:关闭SQL执行的行数统计输出,避免文件末尾出现多余的影响行数提示
  • for /f 参数 "delims=":保留硬件名称中的空格,不会将带空格的名称切割为多个值
  • 开启enabledelayedexpansion:保证循环内变量可以实时更新,避免批处理预编译导致的变量不生效问题

使用方式

仅需要修改脚本开头的数据库连接配置,保存后直接双击运行即可,不需要手动维护硬件名称列表,适配任意客户环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:24:02