一个导出指定文件夹下文件元数据到csv文件中的脚本
不得不说使用AI去生成脚本真的很方便,当有一个需求可以用脚本来解决时候,脚本的代码量不是很多,用AI快速实现一个脚本,比自己手动写要快很多。
需求
今天就有一个需求,需要指定文件夹下的文件上传到OSS服务器上去,并在数据库表中保存这些数据,后期可以通过URL访问这些文件。
解决方式:
- 编写一个脚本,遍历指定文件夹下的所有文件,读取文件的路径、大小、文件名等。
- 将这些元数据写入到一个csv文件中。
- 再将csv文件数据处理下添加上域名直接导入到数据库表中。
使用AI这样一个脚本3分钟就实现,整个需求10分钟搞定。
脚本代码
记录下这个脚本,方便以后使用。
@echo off
chcp 65001 >nul
REM 识别文件夹内文件并输出路径到CSV脚本
REM 作者:AI Assistant
REM 日期:2025-12-26
setlocal enabledelayedexpansion
REM 设置默认值
set "SOURCE_DIR=%cd%"
set "OUTPUT_FILE=file_paths.csv"
REM 检查命令行参数
if "%~1" neq "" set "SOURCE_DIR=%~1"
if "%~2" neq "" set "OUTPUT_FILE=%~2"
REM 如果没有命令行参数,使用交互式模式
if "%~1" equ "" (
REM 显示欢迎信息
echo ============================================
echo 文件路径识别与CSV输出工具
echo ============================================
echo.
REM 提示用户输入要扫描的文件夹
echo 请输入要扫描的文件夹路径(默认:当前目录):
set /p "USER_DIR="
if not "!USER_DIR!"=="" set "SOURCE_DIR=!USER_DIR!"
REM 提示用户输入输出CSV文件名
echo.
echo 请输入输出CSV文件名(默认:file_paths.csv):
set /p "USER_FILE="
if not "!USER_FILE!"=="" set "OUTPUT_FILE=!USER_FILE!"
)
REM 确保输出文件有.csv扩展名
if /i "%OUTPUT_FILE:~-4%" neq ".csv" set "OUTPUT_FILE=%OUTPUT_FILE%.csv"
echo.
echo ============================================
echo 扫描目录:%SOURCE_DIR%
echo 输出文件:%OUTPUT_FILE%
echo ============================================
echo.
REM 删除旧的输出文件(如果存在)
if exist "%OUTPUT_FILE%" del "%OUTPUT_FILE%" >nul
REM 写入CSV表头
echo "文件路径","相对路径","文件名","文件大小(字节)" > "%OUTPUT_FILE%"
echo 正在扫描文件...
echo ============================================
REM 初始化计数器
set "FILE_COUNT=0"
REM 遍历目录下所有文件(包括子目录)
for /r "%SOURCE_DIR%" %%f in (*) do (
REM 计算相对路径:从完整路径中移除当前工作目录部分
set "FULL_PATH=%%~f"
set "REL_PATH=!FULL_PATH:%cd%=!"
REM 移除相对路径开头的反斜杠
if "!REL_PATH:~0,1!"=="\" set "REL_PATH=!REL_PATH:~1!"
REM 添加.\前缀表示相对路径
set "REL_PATH=.\!REL_PATH!"
REM 将文件路径、相对路径、文件名和大小写入CSV文件
echo "%%~f","!REL_PATH!","%%~nxf","%%~zf" >> "%OUTPUT_FILE%"
REM 增加计数器
set /a "FILE_COUNT+=1"
REM 显示进度(每100个文件显示一次)
if !FILE_COUNT! equ 1 echo 发现第1个文件:%%~nxf
if !FILE_COUNT! gtr 1 if !FILE_COUNT! equ 100 echo 已发现100个文件...
if !FILE_COUNT! gtr 100 if !FILE_COUNT! equ 500 echo 已发现500个文件...
if !FILE_COUNT! gtr 500 if !FILE_COUNT! equ 1000 echo 已发现1000个文件...
if !FILE_COUNT! gtr 1000 if !FILE_COUNT! equ 5000 echo 已发现5000个文件...
if !FILE_COUNT! gtr 5000 if !FILE_COUNT! equ 10000 echo 已发现10000个文件...
)
echo ============================================
echo 扫描完成!
echo 共发现 %FILE_COUNT% 个文件
echo 文件路径、相对路径、文件名和大小已输出到:%OUTPUT_FILE%
echo.
REM 如果是交互式模式,等待用户按键
if "%~1" equ "" (
echo 按任意键退出...
pause >nul
)