实用脚本能循环吗?

wen 实用脚本 10

本文目录导读:

实用脚本能循环吗?

  1. 批处理脚本 (Windows .bat/.cmd)
  2. Shell 脚本 (Linux/macOS .sh)
  3. Python 脚本 (最常见)
  4. PowerShell 脚本 (Windows高级)
  5. 实用脚本示例:批量重命名文件
  6. 常见循环场景
  7. 注意事项

当然可以!实用脚本完全可以循环,而且循环是脚本中最常用、最强大的功能之一,无论是批处理、Shell、Python、JavaScript 还是 PowerShell,都支持循环结构。

下面我会从最常见的脚本场景给你一些实用的循环示例:

批处理脚本 (Windows .bat/.cmd)

@echo off
:: 循环处理当前目录下所有 .txt 文件
for %%f in (*.txt) do (
    echo 正在处理:%%f
    find "错误" %%f > nul
    if errorlevel 1 (
        echo 文件 %%f 没有发现错误
    ) else (
        echo 文件 %%f 发现了错误!
    )
)
:: 循环5次,每次打印数字
for /L %%i in (1,1,5) do (
    echo 这是第 %%i 次循环
)

Shell 脚本 (Linux/macOS .sh)

#!/bin/bash
# 循环读取文件列表
for file in /var/log/*.log; do
    if [ -f "$file" ]; then
        echo "检查日志文件: $file"
        tail -n 10 "$file" | grep -i "error"
    fi
done
# 无限循环监控进程,直到手动停止
while true; do
    if pgrep -x "nginx" > /dev/null; then
        echo "$(date) - Nginx 运行正常"
    else
        echo "$(date) - 警告: Nginx 已停止!"
    fi
    sleep 5
done

Python 脚本 (最常见)

import os
import time
# 循环处理文件夹下所有图片
for filename in os.listdir("./images"):
    if filename.endswith((".jpg", ".png", ".gif")):
        print(f"正在处理: {filename}")
        # 你的处理逻辑...
        # resize_image(f"./images/{filename}")
# 带超时的循环
max_retries = 3
retry_count = 0
while retry_count < max_retries:
    try:
        # 尝试连接数据库
        print(f"第 {retry_count+1} 次尝试...")
        # connection = connect_db()
        break  # 成功则跳出
    except Exception as e:
        retry_count += 1
        time.sleep(2)

PowerShell 脚本 (Windows高级)

# 循环导出所有用户信息
$users = Get-LocalUser
foreach ($user in $users) {
    $userInfo = @{
        Name = $user.Name
        Enabled = $user.Enabled
        LastLogon = $user.LastLogon
    }
    $userInfo | Export-Csv -Path "users_report.csv" -Append
}
# 循环直到用户输入
do {
    $input = Read-Host "请输入 'exit' 退出"
    Write-Host "你输入了: $input"
} while ($input -ne "exit")

实用脚本示例:批量重命名文件

Python 版:

import os
for count, filename in enumerate(os.listdir(".")):
    if filename.endswith(".jpg"):
        new_name = f"photo_{count+1:03d}.jpg"
        os.rename(filename, new_name)
        print(f"重命名: {filename} -> {new_name}")

批处理版:

@echo off
setlocal enabledelayedexpansion
set count=1
for %%f in (*.jpg) do (
    set "newname=photo_!count!.jpg"
    ren "%%f" "!newname!"
    set /a count+=1
)

常见循环场景

场景 循环类型 说明
批量处理文件 for file in files 最常见
重试机制 while retry < max 网络请求、数据库连接
监控服务 while true 守护进程
定时任务 for i in range(10) 自动化测试
数据处理 for row in data 分析日志、CSV

注意事项

  1. 避免无限循环:除非是故意的守护进程,否则要设置退出条件
  2. 性能考虑:循环内不要做过多IO操作,可以批量处理
  3. 退出机制:长循环最好提供 Ctrl+C 中断或 --dry-run 预览模式
  4. 调试技巧:先加 echoprint 看循环逻辑对不对,再执行实际操作

循环是实用脚本的灵魂,几乎所有自动化任务都离不开它,你具体想用脚本做什么?我可以给你更针对性的循环示例。

抱歉,评论功能暂时关闭!