使用Windows批处理脚本修改CSV文件中的日期格式
批量修改CSV日期格式的BAT脚本
以下BAT脚本可处理带表头的CSV文件,将Despatch_date [date]字段的日/月/年日期格式转换为月/日/年格式,同时保留原文件备份:
@echo off setlocal enabledelayedexpansion :: 设置要处理的CSV文件路径(可替换为单个文件或目录下所有CSV,比如*.csv) set "csv_files=*.csv" for %%f in (%csv_files%) do ( :: 创建原文件备份,后缀为.bak copy "%%f" "%%f.bak" >nul echo 正在处理文件: %%f :: 创建临时文件存储处理后的数据 set "temp_file=%%~nf_temp.csv" del "%temp_file%" 2>nul set "header_processed=0" set "date_col=-1" :: 逐行读取原文件 for /f "usebackq tokens=* delims=" %%l in ("%%f") do ( if !header_processed! equ 0 ( :: 处理表头,定位Despatch_date [date]所在的列 echo %%l >> "%temp_file%" set "line=%%l" set "col_index=0" :: 分割表头字段 for %%c in ("!line:,=" "!") do ( set "col=%%~c" if "!col!"=="Despatch_date [date]" ( set "date_col=!col_index!" ) set /a col_index+=1 ) set "header_processed=1" ) else ( :: 处理数据行 if !date_col! neq -1 ( set "line=%%l" set "current_col=0" set "new_line=" :: 分割数据行的每个字段 for %%c in ("!line:,=" "!") do ( set "field=%%~c" if !current_col! equ !date_col! ( :: 转换日期格式:日/月/年 -> 月/日/年 for /f "tokens=1-3 delims=/" %%d in ("!field!") do ( set "day=%%d" set "month=%%e" set "year=%%f" :: 确保月份和日期是两位数字(补前导零) if "!day:~1!"=="" set "day=0!day!" if "!month:~1!"=="" set "month=0!month!" set "new_field=!month!/!day!/!year!" ) set "new_line=!new_line!!new_field!," ) else ( set "new_line=!new_line!!field!," ) set /a current_col+=1 ) :: 移除最后一个多余的逗号,写入临时文件 set "new_line=!new_line:~0,-1!" echo !new_line! >> "%temp_file%" ) else ( :: 如果未找到目标字段,直接写入原行 echo %%l >> "%temp_file%" ) ) ) :: 替换原文件为处理后的临时文件 del "%%f" ren "%temp_file%" "%%~nxf" echo 处理完成,原文件备份为: %%f.bak ) echo 所有文件处理完毕! pause
关键说明
- 文件路径设置:修改
set "csv_files=*.csv"可指定单个文件(比如set "csv_files=orders.csv")或目录下所有CSV文件 - 备份机制:脚本会自动为每个原文件创建
.bak后缀的备份,避免数据丢失 - 日期补零:自动为单个数字的日/月补前导零(比如
3/7/2025会转为07/03/2025) - 字段兼容性:仅修改指定的
Despatch_date [date]字段,其他字段内容保持不变
注意事项
- 确保CSV文件中
Despatch_date [date]字段的日期格式严格为日/月/年,且字段内不包含逗号 - 脚本依赖Windows的CMD环境,需保存为
.bat文件后双击运行
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

