您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

关于Windows和Linux简单批处理文件的分享

时间:04-02来源:作者:点击数:

目录

一、批处理脚本概念

二、批处理脚本的作用和意义

三、常用批处理脚本分享

3.1 ssh服务的启动和关闭

3.1.1 startssh.sh(Linux)

3.1.2 stopssh.sh(Linux)

3.2 phpstudy的数据库(MySQl)和中间件(Apache)服务的启动和关闭

3.2.1 startphpstudy.bat(Windows)

3.2.2 stophpstudy.bat(Windows)

3.3 虚拟主机KALI的启动和关闭

3.3.1 startkali.bat(Windows)

3.3.2 stopkali.bat(Windows)

3.4 虚拟主机Windows的启动和关闭

3.4.1 startwin10.bat(Windows)

3.4.2 stopwin10.bat(Windows)

3.5 常见服务和端口的启动和关闭

3.5.1 startsmb445.bat(Windows)

3.5.2 stopsmb445.bat(Windows)

3.6 C2脚本启动和关闭

3.6.1 startCS.sh(Linux)

3.6.2 stopCS.sh(Linux)

3.7 写在最后

3.7.1 建议

3.7.2 分享

脚本经过AI生成和优化,自行判断使用

一、批处理脚本概念

批处理脚本(Batch Script)是由一系列命令组成的文件,通常具有.bat 和.cmd(Windows)以及.sh (Linux)扩展名,并用于在 Windows和Linux 操作系统中自动执行一系列任务。它们是基于命令行的脚本语言,通常用来简化日常操作,自动化系统管理、应用程序配置、任务调度等工作。批处理脚本在系统管理和开发中有着广泛的应用。

二、批处理脚本的作用和意义

批处理脚本的作用和意义

1. 自动化操作: 批处理脚本可以将多个手动操作或命令打包成一个自动执行的脚本。通过编写批处理脚本,可以自动化许多重复性的任务,例如启动或停止应用程序、备份文件、清理临时文件等。这可以极大地提高效率,减少人为操作错误。
  1. 系统管理:对于系统管理员来说,批处理脚本是一个强有力的工具,用于自动化常见的系统管理任务。例如,自动化虚拟机的启动和停止、管理文件备份、日志清理、服务启动与停止等任务。在批处理脚本中,可以集成多个系统命令和工具,使得管理操作更加高效和方便。
  2. 任务调度:批处理脚本可以与 Windows 的任务计划程序结合使用,按预定时间或条件触发执行。例如,系统可以设定每天定时运行一个批处理脚本来执行数据备份,或者每周自动重启特定的服务。
  3. 灵活性和可定制性:批处理脚本支持条件判断(如 if 语句)、循环(如 for 语句)等结构,因此可以根据不同的需求进行灵活的自定义。比如可以根据文件的存在与否执行不同的操作,或者根据用户输入动态修改脚本行为。
  4. 简化任务:对于复杂的操作,批处理脚本能够将多个命令合并为一个文件,只需运行该文件即可完成复杂的操作,无需记住和输入每一个命令。这对于非专业用户也非常友好,使得复杂的操作变得简单和直观。
    便于维护和分享:批处理脚本以文本文件的形式存在,可以方便地编辑、复制和分享。通过脚本,多个系统可以执行相同的操作,这对于团队合作、远程管理等场景非常有意义。
  5. 减少错误:通过自动化执行任务,可以减少人为操作中的错误。例如,虚拟机的启动和停止命令,如果由人手动执行,可能因疏忽或命令拼写错误导致失败;而使用批处理脚本时,执行流程是自动化且一致的,减少了这些风险。

三、常用批处理脚本分享

3.1 ssh服务的启动和关闭

3.1.1 startssh.sh(Linux)
./startssh.sh

脚本代码示例1(可以根据需求自行优化,文件命名可以自定义)

echo "Verifying kernel version..."
KERNEL_VERSION=$(uname -r)
echo "Running kernel version: $KERNEL_VERSION"

echo "Enabling SSH service..."
systemctl enable ssh
systemctl start ssh

echo "Checking SSH service status..."
systemctl status ssh --no-pager

echo "Configuration completed."

# 输出信息,表示正在检查 SSH 服务的状态
echo "Checking SSH service status..."
# 使用 systemctl 查看 SSH 服务的状态,并输出信息
systemctl status ssh --no-pager

# 输出完成信息,表示配置已经完成
echo "Configuration completed."
3.1.2 stopssh.sh(Linux)
./stopssh.sh

脚本代码示例2(可以根据需求自行优化,文件命名可以自定义)

#!/bin/bash

echo "Checking if running as root..."
if [ "$(id -u)" -ne 0 ]; then
    echo "Please run as root"
    exit 1
fi

echo "Stopping SSH service..."
if systemctl stop ssh; then
    echo "SSH service stopped successfully."
else
    echo "Failed to stop SSH service or service not found."
    exit 1
fi

echo "Disabling SSH service..."
if systemctl disable ssh; then
    echo "SSH service disabled successfully."
else
    echo "Failed to disable SSH service."
    exit 1
fi

echo "Checking SSH status..."
systemctl is-active --quiet ssh && echo "SSH service is still running!" || echo "SSH service is stopped."

echo "Done."

3.2 phpstudy的数据库(MySQl)和中间件(Apache)服务的启动和关闭

3.2.1 startphpstudy.bat(Windows)

双击运行,或者命令行启动

startphpstudy.bat

脚本代码示例3(可以根据需求自行优化,文件命名可以自定义)

@echo off
rem 启动 phpstudy_pro 应用程序
rem 此命令启动 phpstudy_pro 主程序,路径需根据实际安装位置调整
echo Starting phpstudy_pro...
start "" "C:\phpstudy_pro\COM\phpstudy_pro.exe"

rem 启动 Apache2.4.39 服务
rem 使用 start 命令启动 Apache 服务,-k start 参数表示启动 Apache 服务
rem 确保 Apache2.4.39 的安装路径和配置文件路径正确
echo Starting Apache...
start "" "C:\phpstudy_pro\Extensions\Apache2.4.39\bin\httpd.exe" -k start

rem 启动 MySQL 服务
rem 使用 start 命令启动 MySQL 服务,--console 参数表示 MySQL 在控制台模式下运行
rem 确保 MySQL5.7.26 的安装路径和配置文件路径正确
echo Starting MySQL5.7.26...
start "" "C:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqld.exe" --console

rem 显示已启动信息
rem 提示用户 phpstudy_pro、Apache2.4.39 和 MySQL5.7.26 已启动
echo phpstudy_pro, Apache2.4.39, and MySQL5.7.26 are now running.

rem 暂停命令行窗口,直到用户按任意键继续
pause
3.2.2 stophpstudy.bat(Windows)

双击运行,或者命令行启动

stophpstudy.bat

脚本代码示例4(可以根据需求自行优化,文件命名可以自定义)

@echo off
rem 显示正在停止的服务信息
rem 该命令向用户显示正在停止 phpstudy_pro、Apache 和 MySQL 服务
echo Stopping phpstudy_pro, Apache2.4.39, and MySQL5.7.26...

rem 停止 Apache 服务
rem 使用 taskkill 命令强制终止 httpd.exe 进程,即停止 Apache2.4.39 服务
rem /F 参数表示强制结束进程,/IM 参数指定进程的映像名称(即 httpd.exe)
echo Stopping Apache2.4.39...
taskkill /F /IM httpd.exe

rem 停止 MySQL 服务
rem 使用 taskkill 命令强制终止 mysqld.exe 进程,即停止 MySQL5.7.26 服务
rem 同样使用 /F 和 /IM 参数来指定进程并强制结束
echo Stopping MySQL5.7.26...
taskkill /F /IM mysqld.exe

rem 关闭 phpstudy_pro 应用
rem 使用 taskkill 命令强制终止 phpstudy_pro.exe 进程,即关闭 phpstudy_pro 应用程序
echo Stopping PHPStudy Pro...
taskkill /F /IM phpstudy_pro.exe

rem 显示已停止的信息
rem 提示用户 phpstudy_pro、Apache 和 MySQL 服务已经成功停止
echo phpstudy_pro, Apache2.4.39, and MySQL5.7.26 have been stopped.

rem 暂停命令行窗口,直到用户按任意键继续
pause

3.3 虚拟主机KALI的启动和关闭

3.3.1 startkali.bat(Windows)

双击运行,或者命令行启动

startkali.bat

脚本代码示例5(可以根据需求自行优化,文件命名可以自定义)

#有窗口
@echo off
set VMX_PATH="C:\KALI2025-W02-01\KALI2025-W02-01.vmx"

echo Starting VMware Workstation...
start "" "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"

timeout /t 5 /nobreak

echo Starting VMware virtual machine in background...
"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "%VMX_PATH%" nogui

exit
有无窗口取决于是使用那个方式运行
有窗口是运行了vmware.exe,如果想无窗口运行
注释掉此命令就行
echo Starting VMware Workstation...
start "" "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"

无界面启动(后台运行)
使用vmrun.exe自带工具
nogui 选项表示不显示 VMware 界面,直接运行虚拟机。
3.3.2 stopkali.bat(Windows)

双击运行,或者命令行启动

stopkali.bat

脚本代码示例6(可以根据需求自行优化,文件命名可以自定义)

#无窗口关闭
@echo off
echo Setting VMX path...
set VMX_PATH="C:\KALI2025-W02-01\KALI2025-W02-01.vmx"

echo Stopping VMware virtual machine...
"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" stop "%VMX_PATH%" hard

echo VMX path cleared.
set VMX_PATH=
exit

3.4 虚拟主机Windows的启动和关闭

3.4.1 startwin10.bat(Windows)

双击运行,或者命令行启动

startwin10.bat

脚本代码示例7(可以根据需求自行优化,文件命名可以自定义)

@echo off
setlocal

rem 设置 VMware 路径
set "VMWARE_PATH=C:\Program Files (x86)\VMware\VMware Workstation"
set "VMX_PATH=D:\VMwareVmdk\Windows10-01\Windows10-01.vmx"

rem 检查 VMware 是否存在
if not exist "%VMWARE_PATH%\vmware.exe" (
    echo VMware Workstation not found at "%VMWARE_PATH%". Exiting...
    exit /b 1
)

rem 检查虚拟机文件是否存在
if not exist "%VMX_PATH%" (
    echo Virtual machine file "%VMX_PATH%" not found. Exiting...
    exit /b 1
)

rem 启动 VMware Workstation
echo Starting VMware Workstation...
start "" "%VMWARE_PATH%\vmware.exe"

rem 等待 2 秒
timeout /t 2 /nobreak

rem 检查 vmrun 是否存在
if not exist "%VMWARE_PATH%\vmrun.exe" (
    echo vmrun.exe not found at "%VMWARE_PATH%\vmrun.exe". Exiting...
    exit /b 1
)

rem 启动虚拟机
echo Starting VMware virtual machine...
"%VMWARE_PATH%\vmrun.exe" start "%VMX_PATH%" nogui
if errorlevel 1 (
    echo Failed to start virtual machine. Please check the vmrun logs for more information.
    exit /b 1
)

echo Virtual machine started successfully.

endlocal
exit
3.4.2 stopwin10.bat(Windows)

双击运行,或者命令行启动

stopwin10.bat

脚本代码示例8(可以根据需求自行优化,文件命名可以自定义)

@echo off
rem 启用局部环境变量,防止环境变量的污染
setlocal

rem 设置 VMware 安装路径,并指定虚拟机文件路径
set "VMWARE_PATH=C:\Program Files (x86)\VMware\VMware Workstation"
set "VMX_PATH=D:\VMwareVmdk\Windows10-01\Windows10-01.vmx"

rem 检查 VMware 是否存在,确认 vmware.exe 文件是否存在
if not exist "%VMWARE_PATH%\vmware.exe" (
    rem 如果未找到 VMware 工作站程序,输出错误信息并退出脚本
    echo VMware Workstation not found at "%VMWARE_PATH%". Exiting...
    exit /b 1
)

rem 检查虚拟机文件是否存在,确保虚拟机配置文件 (.vmx) 存在
if not exist "%VMX_PATH%" (
    rem 如果未找到虚拟机文件,输出错误信息并退出脚本
    echo Virtual machine file "%VMX_PATH%" not found. Exiting...
    exit /b 1
)

rem 等待 2 秒,给系统一些时间以确保路径和文件的检查完成
timeout /t 2 /nobreak

rem 检查 vmrun.exe 是否存在,确保 VMware 的命令行工具 vmrun.exe 可以使用
if not exist "%VMWARE_PATH%\vmrun.exe" (
    rem 如果未找到 vmrun.exe,输出错误信息并退出脚本
    echo vmrun.exe not found at "%VMWARE_PATH%\vmrun.exe". Exiting...
    exit /b 1
)

rem 停止虚拟机,使用 vmrun 工具通过无界面模式 (nogui) 停止虚拟机
echo Stopping VMware virtual machine...
"%VMWARE_PATH%\vmrun.exe" stop "%VMX_PATH%" nogui
rem 检查是否成功执行停止虚拟机的命令,如果失败则输出错误信息并退出
if errorlevel 1 (
    echo Failed to stop virtual machine. Please check the vmrun logs for more information.
    exit /b 1
)

rem 如果虚拟机成功停止,输出虚拟机已成功停止的信息
echo Virtual machine stopped successfully.

rem 结束局部环境变量作用域,清除设置的环境变量
endlocal

rem 退出脚本
exit

3.5 常见服务和端口的启动和关闭

3.5.1 startsmb445.bat(Windows)

双击运行,或者命令行启动

脚本代码示例9(可以根据需求自行优化,文件命名可以自定义)

@echo off
rem Disable command echo for cleaner output

rem Open port 445 in Windows Firewall
rem Adds a firewall rule to allow incoming TCP connections on port 445
netsh advfirewall firewall add rule name="Open 445" protocol=TCP dir=in localport=445 action=allow
echo Port 445 has been opened

rem Configure and start SMB service
rem Set the SMB service (lanmanserver) to start automatically
sc config lanmanserver start= auto
rem Attempt to start the SMB service
sc start lanmanserver
echo SMB service has been started

rem Pause to view output
pause
3.5.2 stopsmb445.bat(Windows)

双击运行,或者命令行启动

脚本代码示例10(可以根据需求自行优化,文件命名可以自定义)

@echo off
rem Disable command echo for cleaner execution output

rem Remove firewall rule for port 445
rem Deletes the existing TCP inbound rule for SMB port 445
netsh advfirewall firewall delete rule name="Open 445" protocol=TCP dir=in localport=445
echo Port 445 has been closed

rem Stop and disable SMB service
rem First stop the running SMB service
sc stop lanmanserver
rem Permanently disable the service from auto-starting
rem Note: The space after 'start=' is mandatory in sc config syntax
sc config lanmanserver start= disabled
echo SMB service has been stopped and disabled

rem Pause to view completion messages
pause

3.6 C2脚本启动和关闭

3.6.1 startCS.sh(Linux)
./startCS.sh

脚本代码示例11(可以根据需求自行优化,文件命名可以自定义)

#!/bin/bash

# ---------- 配置区 ----------
WORK_DIR="/home/tools/Cobalt_Strike_4.7" # 必须设置的工作目录
TEAM_SERVER="./teamserver" # 相对工作目录的路径
IP="服务主机IP"
PASSWORD="自定义密码"
# ---------------------------

# 进入工作目录(关键步骤)
if ! cd "$WORK_DIR" 2>/dev/null; then
    echo "[错误] 无法进入工作目录:$WORK_DIR"
    echo "请检查:1.目录是否存在 2.当前用户是否有访问权限"
    exit 1
fi

# 用户确认环节
read -p "是否继续执行脚本?(y/n): " choice
if [[ ! "$choice" =~ ^[yY] ]]; then
    echo "操作已取消"
    exit 0
fi

# 进程检查(精确匹配命令行)
if pgrep -f "$TEAM_SERVER $IP $PASSWORD" >/dev/null; then
    echo "[状态] teamserver 已在运行"
    exit 0
fi

# 权限检查(避免使用高权限命令)
if [ ! -x "$TEAM_SERVER" ]; then
    echo "[错误] 缺少执行权限:$WORK_DIR/$TEAM_SERVER"
    echo "请手动执行以下命令修复:"
    echo "chmod +x '$WORK_DIR/$TEAM_SERVER'"
    exit 1
fi

# 启动服务(使用 nohup 防止退出)
echo "[启动] 正在启动 teamserver..."
#nohup $TEAM_SERVER $IP $PASSWORD >/dev/null 2>&1 &
nohup $TEAM_SERVER $IP $PASSWORD >> server.log 2>&1 &

# 结果验证
sleep 3
if pgrep -f "$TEAM_SERVER $IP $PASSWORD" >/dev/null; then
    echo "[成功] 服务已启动"
else
    echo "[警告] 进程未检测到,可能启动失败"
    echo "请检查:1.端口冲突 2.日志文件输出"
fi
3.6.2 stopCS.sh(Linux)
./stopCS.sh

脚本代码示例12(可以根据需求自行优化,文件命名可以自定义)

#!/bin/bash

WORK_DIR="/home/tools/Cobalt_Strike_4.7"
TEAM_SERVER="./teamserver"
IP="服务主机IP"
PASSWORD="自定义密码"

if ! cd "$WORK_DIR" 2>/dev/null; then
    echo "[错误] 无法进入工作目录:$WORK_DIR"
    echo "请检查:1.目录是否存在 2.当前用户是否有访问权限"
    exit 1
fi

read -p "是否继续执行脚本?(y/n): " choice
if [[ ! "$choice" =~ ^[yY] ]]; then
    echo "操作已取消"
    exit 0
fi

# 检查进程是否在运行
if ! pgrep -f "teamserver|server.TeamServer" >/dev/null; then
    echo "[状态] teamserver 未运行"
    exit 0
fi

# 停止服务
echo "[停止] 正在停止 teamserver..."

# 杀死前端控制进程
pkill -f "$TEAM_SERVER"
# 杀死Java核心进程
pkill -f "server.TeamServer"

# 强制清理
sleep 2
if pgrep -f "teamserver|server.TeamServer" >/dev/null; then
    echo "[警告] 检测到残留进程,尝试强制终止..."
    pkill -9 -f "teamserver|server.TeamServer"
fi

# 结果验证
timeout=10
count=0
while pgrep -f "teamserver|server.TeamServer" >/dev/null && [ $count -lt $timeout ]; do
    sleep 1
    ((count++))
done

if pgrep -f "teamserver|server.TeamServer" >/dev/null; then
    echo "[严重错误] 无法终止进程,请手动检查:"
    pgrep -af "teamserver|server.TeamServer"
    exit 2
else
    echo "[成功] 服务已完全停止"
    exit 0
fi

3.7 写在最后

3.7.1 建议

文件可以直接放入管理员目录下,打开命令行就可以直接运行,但是存在安全风险,个人根据需求取舍,其它更多的用法可以自行探索。

tips:

1.别忘记给文件赋权

2.关于虚拟主机启动与关闭的问题与你的.vmx文件有关

把加上.vmx绝对路径和.vmx文件的完整路径写全,并且替换掉其中""里面的内容即可成功运行

echo Setting VMX path...

set VMX_PATH="C:\KALI2025-W02-01\KALI2025-W02-01.vmx"

3.VMware如果是默认的安装路径,后面不用改,如果是自定义路径,请替换相应的绝对路径,同2

set "VMWARE_PATH=C:\Program Files (x86)\VMware\VMware Workstation"

4.如何判断虚拟主机成功运行: 当打开VMware看到左侧边栏有向右的绿色三角形符号说明成功启动,没有说明未启动成功或者停止服务成功

5.没有万能的脚本,也没有万能的工具,一切以实际情况为准。

3.7.2 分享

知识并不总是免费,它需要你持久的注意力
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐