本文目录导读:

Bash 脚本方案(Linux/macOS)
#!/bin/bash
# convert_case.sh
# 用法: ./convert_case.sh [路径] [选项]
# 选项: -u 转大写, -l 转小写, -t 转标题格式
usage() {
echo "用法: $0 [-u|-l|-t] [路径]"
echo " -u 转换为大写"
echo " -l 转换为小写"
echo " -t 转换为标题格式(首字母大写)"
exit 1
}
# 解析参数
CASE=""
PATH_DIR="${2:-.}"
case "$1" in
-u) CASE="upper" ;;
-l) CASE="lower" ;;
-t) CASE="title" ;;
*) usage ;;
esac
# 转换函数
convert_name() {
local old_name="$1"
local new_name=""
case "$CASE" in
upper)
new_name=$(echo "$old_name" | tr '[:lower:]' '[:upper:]')
;;
lower)
new_name=$(echo "$old_name" | tr '[:upper:]' '[:lower:]')
;;
title)
new_name=$(echo "$old_name" | awk '{
for (i=1; i<=NF; i++) {
$i = toupper(substr($i,1,1)) substr($i,2)
}
print $0
}')
;;
esac
echo "$new_name"
}
# 遍历文件并重命名
find "$PATH_DIR" -depth -type f | while read -r file; do
dir_name=$(dirname "$file")
base_name=$(basename "$file")
extension="${base_name##*.}"
filename="${base_name%.*}"
new_prefix=$(convert_name "$filename")
# 检查是否有扩展名
if [ "$extension" != "$base_name" ]; then
new_name="${new_prefix}.${extension}"
else
new_name="$new_prefix"
fi
if [ "$base_name" != "$new_name" ]; then
mv "$file" "${dir_name}/${new_name}"
echo "重命名: ${file} → ${dir_name}/${new_name}"
fi
done
Python 脚本方案(跨平台)
#!/usr/bin/env python3
# convert_case.py
import os
import sys
import argparse
def convert_filename(filename, case):
"""转换文件名大小写"""
path, name = os.path.split(filename)
if not os.path.exists(filename):
raise FileNotFoundError(f"文件不存在: {filename}")
# 分离文件名和扩展名
base, ext = os.path.splitext(name)
# 应用转换
if case == 'upper':
new_base = base.upper()
elif case == 'lower':
new_base = base.lower()
elif case == 'title':
new_base = base.title()
else:
new_base = base
# 重新组合路径
new_filename = os.path.join(path, new_base + ext)
return new_filename
def process_directory(directory, case, recursive=True):
"""处理目录中的所有文件"""
count = 0
for root, dirs, files in os.walk(directory):
for file in files:
full_path = os.path.join(root, file)
try:
new_path = convert_filename(full_path, case)
if new_path != full_path:
os.rename(full_path, new_path)
count += 1
print(f"重命名: {full_path}")
print(f" → {new_path}")
except Exception as e:
print(f"错误: {file}: {e}", file=sys.stderr)
print(f"\n总共处理了 {count} 个文件")
def main():
parser = argparse.ArgumentParser(description='批量转换文件名大小写')
parser.add_argument('case', choices=['upper', 'lower', 'title'],
help='转换类型: upper/lower/title')
parser.add_argument('path', nargs='?', default='.',
help='要处理的目录(默认当前目录)')
parser.add_argument('--no-recursive', action='store_true',
help='不递归处理子目录')
args = parser.parse_args()
# 检查路径是否存在
if not os.path.exists(args.path):
print(f"错误: 路径不存在: {args.path}", file=sys.stderr)
sys.exit(1)
process_directory(args.path, args.case, not args.no_recursive)
if __name__ == '__main__':
main()
PowerShell 脚本方案(Windows)
# convert_case.ps1
param(
[Parameter(Mandatory=$true)]
[ValidateSet("upper", "lower", "title")]
[string]$Case,
[string]$Path = ".",
[switch]$Recursive
)
function Convert-Case {
param([string]$String, [string]$CaseType)
switch ($CaseType) {
"upper" { return $String.ToUpperInvariant() }
"lower" { return $String.ToLowerInvariant() }
"title" {
$culture = [System.Globalization.CultureInfo]::InvariantCulture
return $culture.TextInfo.ToTitleCase($String)
}
}
}
function Process-File {
param([string]$FilePath, [string]$CaseType)
$directory = Split-Path $FilePath -Parent
$fileName = Split-Path $FilePath -Leaf
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($fileName)
$extension = [System.IO.Path]::GetExtension($fileName)
$newBase = Convert-Case -String $baseName -CaseType $CaseType
$newFileName = $newBase + $extension
$newPath = Join-Path $directory $newFileName
if ($fileName -ne $newFileName) {
Rename-Item $FilePath -NewName $newFileName
Write-Host "重命名: $FilePath -> $newPath" -ForegroundColor Green
}
}
# 获取文件列表
if ($Recursive) {
$files = Get-ChildItem -Path $Path -Recurse -File
} else {
$files = Get-ChildItem -Path $Path -File
}
# 处理文件(从后往前处理,避免冲突)
$files | Sort-Object { $_.FullName } -Descending | ForEach-Object {
Process-File -FilePath $_.FullName -CaseType $Case
}
简单命令行版本(适用于快速操作)
仅转换当前目录(Linux/macOS)
# 转大写
for f in *; do
mv "$f" "$(echo "$f" | tr '[:lower:]' '[:upper:]')" 2>/dev/null
done
# 转小写
for f in *; do
mv "$f" "$(echo "$f" | tr '[:upper:]' '[:lower:]')" 2>/dev/null
done
批量处理指定目录
# 处理指定目录中的所有文件
find /path/to/directory -type f | while read f; do
dir=$(dirname "$f")
base=$(basename "$f")
# 转大写
newname=$(echo "$base" | tr '[:lower:]' '[:upper:]')
if [ "$base" != "$newname" ]; then
mv "$f" "${dir}/${newname}"
fi
done
使用示例
Bash 脚本
# 将当前目录所有文件转为小写 ./convert_case.sh -l # 将指定目录转为大写 ./convert_case.sh -u /path/to/directory
Python 脚本
# 将当前目录所有文件转为大写 python3 convert_case.py upper # 递归处理指定目录,转换文件名为小写 python3 convert_case.py lower /path/to/directory # 不递归处理当前目录 python3 convert_case.py title --no-recursive
PowerShell
# 转换当前目录文件为小写 .\convert_case.ps1 -Case lower # 递归处理指定目录 .\convert_case.ps1 -Case upper -Path D:\Documents -Recursive
注意事项
- 冲突处理:如果转换后文件名重复,脚本可能覆盖已有文件,建议先在测试目录试验
- 备份建议:运行前最好备份数据
- 权限检查:确保有修改文件的权限
- 特殊字符:文件名可能包含特殊字符,脚本已做基本处理
选择最适合您的平台和需求的版本即可!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播