2024 / 9 / 14
这套方法我用了很多年,今天突然想起来了,于是抽空提炼一下并分享给大家。
以下内容虽然是代码,但是都添加有详细的注释说明,并且案例都以通用的 AAA XXX 等符号代替,自己可以轻松看懂并修改。
创建一个记事本,将后缀改成 .bat ,文件名则随意,文件内容(程序脚本)见下文。
将文件或文件的快捷方式(通过右键创建)放到“启动”文件夹里,即可在电脑开机时自动执行。
在资源管理器按 Alt + D 或 Ctrl + L 或定位到地址栏,输入“启动”,然后回车,即可打开“启动”文件夹。
根据自己的用途,修改或复用以下代码,然后用记事本打开 .bat 文件进行编辑,将以下代码粘贴到其中并保存。
我用来整理下载文件夹,将程序文件、媒体文件等资料自动备份到百度网盘的同步盘,同时做到了整理和备份。
@echo off :: 设置源文件夹和目标文件夹 set source_folder=C:\Download set destination_folder=D:\BaiduNetDiskWorkspace :: 创建目标文件夹,如果不存在的话 if not exist "%destination_folder%" ( mkdir "%destination_folder%" ) :: 处理后缀为 .aaa 的文件 for %%f in ("%source_folder%\*.aaa") do ( if not exist "%destination_folder%\后缀AAA" ( mkdir "%destination_folder%\后缀AAA" ) move "%%f" "%destination_folder%\后缀AAA\" ) :: 处理后缀为 .bbb 的文件 for %%f in ("%source_folder%\*.bbb") do ( if not exist "%destination_folder%\后缀BBB" ( mkdir "%destination_folder%\后缀BBB" ) move "%%f" "%destination_folder%\后缀BBB\" ) :: 处理文件名包含 xxx 的文件 for %%f in ("%source_folder%\*xxx*") do ( if not exist "%destination_folder%\文件名XXX" ( mkdir "%destination_folder%\文件名XXX" ) move "%%f" "%destination_folder%\文件名XXX\" ) :: 处理文件名以 yyy 开头的文件 for %%f in ("%source_folder%\yyy*") do ( if not exist "%destination_folder%\文件名YYY" ( mkdir "%destination_folder%\文件名YYY" ) move "%%f" "%destination_folder%\文件名YYY\" ) :: 处理文件名以 zzz 结尾的文件 for %%f in ("%source_folder%\*zzz") do ( if not exist "%destination_folder%\文件名ZZZ" ( mkdir "%destination_folder%\文件名ZZZ" ) move "%%f" "%destination_folder%\文件名ZZZ\" ) :: 处理后缀为 .ccc 且文件名包含 ddd 的文件 for %%f in ("%source_folder%\*ddd*.ccc") do ( if not exist "%destination_folder%\文件名DDD-后缀ccc" ( mkdir "%destination_folder%\文件名DDD-后缀ccc" ) move "%%f" "%destination_folder%\文件名DDD-后缀ccc\" ) :: 通知操作完成 echo 文件已成功整理! pause
Prompt 指令和说明
请编写一个 .bat 脚本,将 C 盘 Download 文件夹里的文件自动移动到 D 盘BaiduNetDiskWorkspace 文件夹里,具体规则如下,请附上详尽的备注说明: - 将后缀为 .aaa 的文件,自动整理到名为 后缀AAA 的子文件夹里; - 将后缀为 .bbb 的文件,自动整理到名为 后缀BBB 的子文件夹里; - 将文件名称包含 xxx 的文件,自动整理到名为 文件名XXX 的子文件夹里; - 将文件名称以 yyy 开头的文件,自动整理到名为 文件名YYY 的子文件夹里; - 将文件名称以 zzz 结尾的文件,自动整理到名为 文件名ZZZ 的子文件夹里; - 将后缀为 .ccc 且文件名称中包含 ddd 的文件,自动整理到名为 文件名DDD-后缀ccc 的文件夹 里 ----- 源文件夹和目标文件夹的设置: 通过 set source_folder 和 set destination_folder 来定义文件整理的源和目标文件夹。 检查并创建子文件夹: 每个规则都会先检查目标文件夹中是否存在相应的子文件夹(如“后缀AAA”、“文件名XXX”等),如果不存在,则通过 mkdir 命令创建。 文件移动操作: move 命令用于将符合条件的文件从 C:\Download 文件夹移动到 D:\BaiduNetDiskWorkspace 下对应的子文件夹。 不同的处理规则: 后缀为 .aaa 和 .bbb 的文件会分别移动到 后缀AAA 和 后缀BBB 的子文件夹中。 文件名包含 xxx 的文件会移动到 文件名XXX 的子文件夹中。 文件名以 yyy 开头的文件会移动到 文件名YYY 的子文件夹中。 文件名以 zzz 结尾的文件会移动到 文件名ZZZ 的子文件夹中。 后缀为 .ccc 且文件名包含 ddd 的文件会移动到 文件名DDD-后缀ccc 的子文件夹中。 脚本最后一行的 pause: 在所有操作完成后,pause 命令用于暂停命令行窗口,以便你查看文件移动的结果。
同上。我用来自动备份 Anki 所在的文件夹,以及备份一些软件的自定义设置项。
@echo off :: 获取当前日期和时间,格式为:YYYYMMDD-HHMMSS setlocal for /f "tokens=1-4 delims=/ " %%a in ('echo %date% %time%') do ( set timestamp=%%a%%b%%c-%%d ) set timestamp=%timestamp: =% :: 创建目标路径并进行备份 :: 备份 C:\A1\B1 到 D:\X1\Y1\<时间戳> xcopy "C:\A1\B1\*" "D:\X1\Y1\%timestamp%\" /s /e /i /y :: 备份 C:\A1\B2 到 D:\X1\Y2\<时间戳> xcopy "C:\A1\B2\*" "D:\X1\Y2\%timestamp%\" /s /e /i /y :: 备份 C:\A2\B1 到 D:\X2\Y1\<时间戳> xcopy "C:\A2\B1\*" "D:\X2\Y1\%timestamp%\" /s /e /i /y :: 备份 C:\A2\B2 到 D:\X2\Y2\<时间戳> xcopy "C:\A2\B2\*" "D:\X2\Y2\%timestamp%\" /s /e /i /y echo 文件备份完成! pause
Prompt 指令和说明
请编写一个 .bat 脚本,用于文件备份,具体要求如下: - 获取当前日期和时间,以类似于“20240914-105142”的形式组织年月日时分秒,作为“时间戳”变量 - 将 C:\A1\B1 文件夹下的文件和文件夹都复制到 D:\X1\Y1 文件夹下以“时间戳”命名的子文件夹中; - 将 C:\A1\B2 文件夹下的文件和文件夹都复制到 D:\X1\Y2 文件夹下以“时间戳”命名的子文件夹中; - 将 C:\A2\B1 文件夹下的文件和文件夹都复制到 D:\X2\Y1 文件夹下以“时间戳”命名的子文件夹中; - 将 C:\A2\B2 文件夹下的文件和文件夹都复制到 D:\X2\Y2 文件夹下以“时间戳”命名的子文件夹中; ----- setlocal 用于设置本地环境变量,避免影响其他批处理脚本。 for /f 循环用于获取当前日期和时间并进行格式化,得到形如 YYYYMMDD-HHMMSS 的时间戳。 xcopy 命令用于复制文件和文件夹,参数说明: /s:复制所有子文件夹,但忽略空的子文件夹。 /e:包括空的子文件夹。 /i:如果目标文件夹不存在,则创建。 /y:自动确认覆盖现有文件。 每个源文件夹备份到相应的目标文件夹,目标文件夹以时间戳命名。
同上。
@echo off :: 最小化 PowerShell 窗口 powershell -windowstyle minimized :: 启动 C:\AAA\BBB\ccc.exe start "" "C:\AAA\BBB\ccc.exe" :: 启动 C:\AAA\BBB\ddd.bat start "" "C:\AAA\BBB\ddd.bat" :: 启动 D:\BaiduNetdiskWorkspace\CapsWriter\CapsWriter-Offline-Windows-64bit\start_server.exe start "" "D:\BaiduNetdiskWorkspace\CapsWriter\CapsWriter-Offline-Windows-64bit\start_server.exe" :: 启动 D:\BaiduNetdiskWorkspace\CapsWriter\CapsWriter-Offline-Windows-64bit\start_client.exe start "" "D:\BaiduNetdiskWorkspace\CapsWriter\CapsWriter-Offline-Windows-64bit\start_client.exe" exit
为了方便管理,可以只将这一个程序放到“启动”文件夹,调用以上批处理程序或其他程序。
为了方便保存,最好将批处理程序放到网盘同步的文件夹里,然后将程序的快捷方式放到“启动”文件夹里,这样就不会因为重装系统而丢失程序了。