游客

Windows CMD 脚本教程(第三课)—— 文件操作与函数封装

一言准备中...

欢迎来到 CMD 脚本第三课!今天我们将学习文件/目录管理函数封装,让你的脚本具备更强的系统操作能力。


1. 文件与目录操作

(1) 创建/删除目录

命令 作用 示例
mkdirmd 创建目录 mkdir Backup
rmdirrd 删除空目录 rmdir EmptyDir
rmdir /s /q 强制删除非空目录 rmdir /s /q OldProjects

示例:带容错判断的目录操作

@echo off
if not exist "D:\Backup\" (
    mkdir D:\Backup
    echo 备份目录已创建
) else (
    echo 备份目录已存在
)

(2) 复制/移动/删除文件

命令 作用 示例
copy 复制文件 copy file.txt D:\Backup\
xcopy 复制目录(含子目录) xcopy /e /i Source Dest
move 移动/重命名文件 move old.txt new.txt
delerase 删除文件 del *.tmp /q

示例:备份当日文件

@echo off
set "date=%DATE:~0,10%"
xcopy /y "C:\Reports\*.xlsx" "D:\Backup\%date%\" >nul
echo 文件已备份至 D:\Backup\%date%\

(3) 文件属性操作

命令 作用
attrib +h 隐藏文件
attrib -r 取消只读属性

示例:保护重要文件

@echo off
attrib +h +r "C:\Secret\passwords.txt"

2. 函数封装

(1) 定义和调用函数

CMD 通过 call :label 模拟函数:

@echo off
call :say_hello "Alice"
exit /b

:say_hello
echo Hello, %~1!
exit /b

关键点

  • %~1 获取第一个参数(去掉引号)
  • exit /b 结束函数(不退出脚本)

(2) 返回值处理

通过变量传递结果:

@echo off
call :sum 10 20 result
echo 10 + 20 = %result%
exit /b

:sum
set /a "%~3=%~1 + %~2"
exit /b

3. 综合案例

自动清理7天前的日志文件

@echo off
set "log_dir=C:\Logs"
set "days=7"

call :clean_old_files "%log_dir%" %days%
exit /b

:clean_old_files
forfiles /p "%~1" /m *.log /d -%~2 /c "cmd /c del @path /q"
echo 已清理 %~1 中超过 %~2 天的日志
exit /b

4. 错误处理进阶

(1) 错误日志记录

@echo off
call :task >"C:\Logs\script.log" 2>&1
exit /b

:task
echo 开始执行任务...
xcopy /invalidparam || (
    echo [ERROR] 命令执行失败 >>"C:\Logs\errors.log"
    exit /b 1
)

5. 练习任务

  1. 写一个脚本:将 C:\Source 下所有 .docx 文件复制到 D:\Backup,并记录成功/失败的文件名
  2. 挑战任务:创建函数 :get_file_count 统计指定扩展名的文件数量

练习答案

任务1:带日志的文件备份

@echo off
set "source=C:\Source"
set "backup=D:\Backup"
set "log=backup_log_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.txt"

echo 备份开始:%TIME% >"%log%"
for %%f in ("%source%\*.docx") do (
    copy "%%f" "%backup%\" >nul 2>&1
    if %errorlevel%==0 (
        echo [OK] %%f >>"%log%"
    ) else (
        echo [FAILED] %%f >>"%log%"
    )
)
echo 备份完成:%TIME% >>"%log%"

任务2:文件统计函数

@echo off
call :get_file_count "C:\Photos" "jpg" count
echo 找到 %count% 个 .jpg 文件
exit /b

:get_file_count
set /a "%~3=0"
for /f %%a in ('dir /b "%~1\*.%~2" 2^>nul ^| find /c /v ""') do set "%~3=%%a"
exit /b

6. 下一步学习

  • 第四课:注册表操作(reg命令)和网络管理(netsh/ping
  • 第五课:与PowerShell混合编程

掌握这些技能后,你将能处理90%的Windows自动化需求。 🛠️

  • 本文作者:菜鬼
  • 本文链接: https://caigui.net/post-18.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
130
4
0
1
梦想不大,创造神话。

Windows CMD 脚本教程(第二课)—— 条件判断与循环

上一篇

Windows CMD 脚本教程(第四课)—— 注册表操作与网络管理

下一篇
评论区
内容为空

这一切,似未曾拥有