Windows下循环复制一个文件

以下是一个用于批量复制文件并重命名的 Windows 批处理脚本。

bat 复制代码
@echo off
setlocal enabledelayedexpansion

:: 设置需要拷贝的总次数
set "total_count=300"

:: --- 循环拷贝 ---
for /L %%i in (1, 1, %total_count%) do (
    :: 生成三位数的序号,例如 001, 002
    set "num=00%%i"
    set "num=!num:~-3!"

    :: 执行拷贝命令
    copy "Win2019.zip" "!num!_!source_file!" > nul
)

echo 拷贝完成!共拷贝了 %total_count% 个文件。
pause

它的主要功能是:将一个名为 Win2019.zip 的文件复制 300 次,并将复制出来的文件依次命名为 001_...002_... 直到 300_...

下面我将逐行详细解释脚本的含义:


📜 脚本逐行解析

1. 环境初始化
batch 复制代码
@echo off
setlocal enabledelayedexpansion
  • @echo off:关闭回显。意思是执行脚本时,不要在屏幕上显示每一行具体的命令,只显示命令执行的结果(或者不显示)。
  • setlocal enabledelayedexpansion关键命令 。开启"延迟变量扩展"。
    • 为什么需要它? 在批处理的 for 循环中,普通变量(如 %var%)在循环开始前就会被解析,导致无法在循环内部更新变量的值。使用 !var! 语法可以确保每次循环都能获取变量的最新值
2. 设置参数
batch 复制代码
:: 设置需要拷贝的总次数
set "total_count=300"
  • :::表示注释,不会被执行。
  • set "total_count=300":定义一个变量 total_count,值为 300。这决定了循环会执行多少次。
3. 循环结构
batch 复制代码
for /L %%i in (1, 1, %total_count%) do (
  • for /L:这是批处理中的数值循环命令。
  • %%i:循环变量。
  • (1, 1, %total_count%):循环参数,格式为 (起始值, 步长, 结束值)
    • 意思是从 1 开始,每次增加 1 ,直到 300 结束。
4. 数字格式化 (补零)
batch 复制代码
    :: 生成三位数的序号,例如 001, 002
    set "num=00%%i"
    set "num=!num:~-3!"

这是脚本中最巧妙的部分,用于生成 001, 002 这种格式的数字:

  1. set "num=00%%i"
    • %%i 为 1 时,num 变为 001
    • %%i 为 10 时,num 变为 0010
    • %%i 为 100 时,num 变为 00100
  2. set "num=!num:~-3!"
    • 这是字符串截取语法。~-3 表示从右边数截取 3 位字符
    • 001 截取后是 001
    • 0010 截取后是 010
    • 00100 截取后是 100
    • 结果: 无论数字多大,都能保证输出为标准的三位数格式。
5. 执行拷贝
batch 复制代码
    :: 执行拷贝命令
    copy "Win2019.zip" "!num!_!source_file!" > nul
)
  • copy "Win2019.zip" ...:源文件是 Win2019.zip(脚本所在目录下必须存在此文件)。
  • "!num!_!source_file!":这是目标文件名。
    • 使用了 ! 符号来引用变量(因为开启了延迟扩展)。
    • 注意: 脚本中使用了 !source_file! 变量,但在前面的代码中并没有定义 这个变量。这通常意味着:
      • 要么这是一个笔误,原意可能是想硬编码一个后缀(如 Win2019.zip)。
      • 要么这个脚本依赖于外部传入的环境变量。
      • 如果 source_file 为空,生成的文件名将会是 001_002_ 这样没有后缀的文件。
  • > nul:将命令的输出(如 "1 file(s) copied")重定向到空设备,即不显示在屏幕上,保持界面整洁。
6. 结束提示
batch 复制代码
echo 拷贝完成!共拷贝了 %total_count% 个文件。
pause
  • echo ...:显示完成消息。
  • pause:暂停脚本,防止窗口执行完立刻关闭,方便用户查看结果。

⚠️ 脚本中存在的问题

这个脚本如果直接运行,可能会有一个逻辑错误

变量 source_file 未定义。

  • 现状: 目标文件名是 001_ (如果 source_file 为空)。

  • 修正建议: 如果你想把文件复制为 001_Win2019.zip,应该将第 16 行修改为:

    batch 复制代码
    copy "Win2019.zip" "!num!_Win2019.zip" > nul

    或者在脚本开头定义:

    batch 复制代码
    set "source_file=Win2019.zip"

📌 总结

这个脚本的作用是生成 300 个带有三位数前缀的副本,常用于需要批量生成测试数据或分卷文件名的场景。

相关推荐
DY009J7 小时前
从 MSYS2 环境中提取独立 MinGW-w64 工具链的技术方案
c++·windows
J2虾虾7 小时前
Java使用jcifs读取Windows的共享文件
java·开发语言·windows
liulilittle8 小时前
OPENPPP2 1.0.0.26145 正式版发布:内核态 SYSNAT 性能飞跃 + Windows 平台避坑指南
开发语言·网络·c++·windows·通信·vrrp
分布式存储与RustFS8 小时前
Windows原生版RustFS:无需Docker,1分钟本地对象存储环境搭建
windows·docker·容器·对象存储·minio·企业存储·rustfs
xjt_09019 小时前
Oh My Codex 快速使用指南
windows
独隅9 小时前
在 Windows 上部署 TensorFlow 模型的全面指南
人工智能·windows·tensorflow
.生产的驴9 小时前
Vue3 超大字体font-slice按需分片加载,极速提升首屏速度, 中文分片加载方案,性能优化
前端·vue.js·windows·青少年编程·性能优化·vue·rescript
小白o菜9 小时前
Claude Code在windows部署,使用第三方api,如open router等
windows·claude·openrouter·aicodemirror·小鱼api
代码小书生10 小时前
Windows X-Lite Win11 26H1 v3 游戏优化系统!集Win11、Win10、Win7三代优点,兼顾游戏办公生产算力,系统精简纯净
windows·游戏·windows x-lite·windows 游戏版·windows优化版·老电脑系统