Node-RED中能否给文件路径加变量并按日生成带日期的CSV文件?
在Node-RED中生成带日期的每日唯一CSV文件
完全可以通过Node-RED节点实现,不需要硬编码,以下是具体实现方案:
1. 生成格式化的日期文件名
首先需要将日期转换为你需要的DD/MM/YYYY格式(注意:文件名中使用/会引发路径问题,后面会说明),可以用Function节点或Change节点处理:
使用Function节点的示例代码
const date = new Date(); // 补零确保日期/月份为两位数字 const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); // 注意:Windows系统文件名不能含/,Linux/macOS会将/识别为目录分隔符,建议替换为-或_ // 按你的需求生成格式(存在路径风险): const dateStr = `${day}/${month}/${year}`; // 推荐的安全格式: // const dateStr = `${day}-${month}-${year}`; // 将生成的文件名存入msg.filename msg.filename = `./Documentos/Teste-node/tes_${dateStr}.csv`; return msg;
使用Change节点的方式
通过JSONata表达式生成日期字符串:
- 在Change节点中设置
Set msg.filename为JSONata类型,输入表达式:
同样建议将"./Documentos/Teste-node/tes_" & $pad($day($now()), 2, "0") & "/" & $pad($month($now()), 2, "0") & "/" & $year($now()) & ".csv"/替换为-避免路径问题。
2. 动态写入文件
将File节点配置为"写入"模式,在"文件名"字段中填写{{msg.filename}},这样File节点会动态读取Function/Change节点生成的文件名:
- 如果需要每日向同一个文件追加内容,勾选File节点的"追加"选项;
- 如果仅需创建一次文件(后续不追加),可以配合Context存储记录当日是否已创建文件,避免重复创建。
关键注意事项
- 文件名中的路径分隔符问题:
/在Windows中是路径分隔符,会导致文件创建失败;在Linux/macOS中会创建嵌套目录(比如生成tes_01/01/2023.csv会变成tes_01目录下的01目录里的2023.csv),这通常不符合需求,所以强烈建议将日期分隔符替换为-或_,比如tes_01-01-2023.csv。 - 每日唯一文件的实现:由于生成的日期字符串按天固定,只要当天触发写入,都会指向同一个文件,自然实现每日一个文件的需求。
内容的提问来源于stack exchange,提问作者LCS.T
相关产品推荐
相关产品推荐

