前言

bat 脚本和 sh 脚本是分别用于 Windows 和 类 Unix 系统(如 Linux、macOS) 的批处理/脚本文件,用于自动化执行一系列命令

BAT 与 SH 脚本命令对比表

功能Windows .bat / .cmd 脚本Linux/macOS .sh 脚本(Bash)
输出信息echo Hello Worldecho "Hello World"
注释:: 注释内容rem 注释内容# 注释内容
变量赋值set name=张三name="张三"
引用变量%name%$name${name}
执行命令并获取输出不直接支持(需重定向到文件) output=`ls` output=$(ls)
创建目录mkdir C:\tempmkdir /tmp/temp
删除文件del file.txtrm file.txt
删除目录(含内容)rmdir /s /q folderrm -rf folder
复制文件copy file1.txt file2.txtcp file1.txt file2.txt
移动/重命名文件move old.txt new.txtmv old.txt new.txt
判断文件是否存在if exist file.txt echo 存在if [ -f file.txt ]; then echo "存在"; fi
判断目录是否存在if exist C:\temp\nul echo 存在if [ -d /tmp ]; then echo "存在"; fi
延迟/睡眠timeout /t 5sleep 5(单位:秒)
调用另一个脚本call script2.bat. script2.shsource script2.sh./script2.sh
跳转标签goto label
:label
使用函数:
function label()
label
退出脚本exitexit /b 0exit 0
设置可执行权限不需要chmod +x script.sh
执行脚本script.bat 或双击./script.shbash script.sh
当前脚本路径%~dp0$(dirname "$0")$(realpath "$(dirname "$0")")
参数引用%0(脚本名)
%1, %2...(参数)
%*(所有参数)
$0(脚本名)
$1, $2...(参数)
$@$*(所有参数)
字符串连接set combined=%str1%%str2%combined="$str1$str2"
字符串长度无内置命令(需 PowerShell 或复杂逻辑)${#var}
获取子字符串无直接支持${var:0:5}(从索引0取5个字符)
环境变量引用%PATH%$PATH
换行符\r\n(CRLF)\n(LF)

注意事项

  • 路径分隔符

    • Windows:\
    • Linux/macOS:/
  • 大小写敏感性

    • .bat:不区分大小写(命令和变量)
    • .sh:区分大小写
  • 脚本首行(Shebang)

    • .sh 脚本通常以 #!/bin/bash 开头,指定解释器。
    • .bat 脚本无此概念。
  • 错误处理

    • .bat:使用 %errorlevel% 获取上一条命令返回码。
    • .sh:使用 $? 获取上一条命令退出状态。

我们编写跨平台脚本时,建议使用 PowerShell.ps1)或 Python,它们在 Windows、Linux 和 macOS 上均有良好支持


.bat脚本集合


.sh脚本集合


补充扩展(定时任务)

Windows

  • 我的电脑》》》控制面板》》》计划任务
  • 任务计划程序库》》》创建基本任务
  • 填写任务信息》》》执行间隔》》》执行脚本》》》是否登录运行

Windows 定时任务.png

Linux

在Linux系统中,创建定时任务主要通过cron服务来实现

  • 编辑Crontab文件
crontab -e

这个命令会打开当前用户的cron文件进行编辑。如果你是第一次使用,可能会让你选择编辑器(如nano或vi)

  • 示例(每天凌晨2点执行一个名为my_script.sh的脚本)
 0 2 * * * /path/to/your/script/my_script.sh
  • 保存并退出

编辑完成后,根据选择的编辑器(如使用vi,则是:wq保存并退出),保存更改并退出编辑器

  • 查看当前所有定时任务
 crontab -l

注意事项
确保脚本有执行权限(chmod +x my_script.sh)。
脚本路径应该是绝对路径,以避免因环境变量不同导致的执行失败

Last modification:August 13, 2025
如果觉得我的文章对你有用,您可以给博主买一杯果汁,谢谢!