我们在进行网站开发时,通常使用webpack等工具进行文件的合并和打包。但是某些时候我们仅仅需要对一些文件进行简单的合并操作。希望能够以更简单的方式进行处理。通过windows的批处理命令copy即可进行简单的文件合处理。

下面是具体的实现代码:

@echo off
chcp 65001 > nul
REM 设置控制台编码为UTF-8,以显示中文
setlocal EnableDelayedExpansion

set merged_file=merged_file.js
REM 指定合并后的文件路径
set /a file_count=0

REM 将要合并的文件路径以数组的形式存储
set "source_files[1]=1.js"
set "source_files[2]=2.js"
set "source_files[3]=3.js"
REM 这里假设文件数量不超过100,并且使用了类似于"file_1", "file_2" 这样的变量名来存储要合并的文件。

REM 读取所有的变量并将其存储到一个数组中
for /l %%i in (1,1,100) do (
  set "var_name=source_files[%%i]"
  if defined !var_name! (
    call set "file_path=%%!var_name!%%"
    if exist "!file_path!" (
      set /a file_count+=1
      REM 如果文件存在,则将其存储到数组中,并增加文件计数器
      set "source_files[!file_count!]=!file_path!"
    ) else (
      echo 源文件 !file_path! 未找到。
    )
  )
)

if %file_count% equ 0 (
  REM 如果未找到任何源文件
  echo 未找到任何源文件。
  exit /b 1
)

REM 将要合并的文件路径拼接成合并命令
set "command="
for /L %%i in (1,1,%file_count%) do (
  set "command=!command!+!source_files[%%i]!"
)
REM 去掉命令开头的"+"
set "command=%command:~1%"

if exist "%merged_file%" (
  REM 如果合并后的文件已存在
  set /p "overwrite=Exist Overwrite?"
  REM 提示用户是否覆盖
  if /i "!overwrite!" equ "n" (
    REM 如果用户选择不覆盖
    echo Stop!
    exit /b 1
    REM 退出脚本
  )
  del /f /q "%merged_file%"
  REM 删除旧的合并后的文件
)

REM 执行合并命令
copy /b %command% "%merged_file%"

if %errorlevel% neq 0 (
  REM 如果合并操作出错
  echo 合并操作出错。
  exit /b 1
)

REM 显示成功提示信息
echo 合并完成。

exit /b 0

以上代码只需要你设置了合并后的文件名,和需要合并的文件列表,即可自动完成文件合并。它包含以下功能:

1、检测打包的文件是否存在,如果不存在,在控制台给出提示。

2、如果最后合并后生成的文件已存在,给出提示是否覆盖,并完成相应操作。

你可以将代码复制到windows记事本,然后保存为utf8无dom模式后直接运行即可。

注意:

1、设置了文件合并上限为100,如果需要设置为其它数值,修改for循环中数字100即可。

2、输入和输出的文件均可带目录。

通过此方式你可以为每一个要输入的文件以REM的方式添加文件注释,并随时调整需要合并的文件。