本文目录导读:

Linux/macOS (Bash 脚本)
简单版本 - 用下划线替换空格
#!/bin/bash
# 用下划线替换当前目录下所有文件名的空格
for file in *; do
if [[ "$file" == *" "* ]]; then
new_name="${file// /_}"
mv "$file" "$new_name"
echo "已将 '$file' 重命名为 '$new_name'"
fi
done
增强版 - 完整去除空格(不含下划线)
#!/bin/bash
# 完全去除文件名中的空格
for file in *; do
if [[ "$file" == *" "* ]]; then
new_name="$(echo "$file" | tr -d ' ')"
mv "$file" "$new_name"
echo "已将 '$file' 重命名为 '$new_name'"
fi
done
递归处理子目录
#!/bin/bash
# 递归处理所有子目录中的文件
find . -type f -name "* *" | while read -r file; do
# 获取文件名和路径
dir=$(dirname "$file")
filename=$(basename "$file")
# 去除空格(用下划线替换)
new_name="${filename// /_}"
mv "$file" "$dir/$new_name"
echo "已将 '$file' 重命名为 '$dir/$new_name'"
done
Windows (批处理文件 .bat)
@echo off
setlocal enabledelayedexpansion
for %%f in (*.txt) do (
set "filename=%%f"
set "newname=!filename: =_!"
if not "!filename!"=="!newname!" (
ren "%%f" "!newname!"
echo 已将 "%%f" 重命名为 "!newname!"
)
)
echo 完成!
pause
Windows PowerShell 脚本
# 去除文件名中的空格,替换为下划线
Get-ChildItem -Recurse | Where-Object { $_.Name -match '\s' } | ForEach-Object {
$newName = $_.Name -replace '\s', '_'
Rename-Item -Path $_.FullName -NewName $newName
Write-Host "已将 '$($_.Name)' 重命名为 '$newName'"
}
Python 脚本
import os
import pathlib
def rename_files(directory, mode='replace'):
"""
批量去除文件名中的空格
mode: 'replace' - 用下划线替换空格
'remove' - 完全去除空格
"""
for path in pathlib.Path(directory).rglob('*'):
if path.is_file() and ' ' in path.name:
try:
if mode == 'replace':
new_name = path.name.replace(' ', '_')
else:
new_name = path.name.replace(' ', '')
new_path = path.with_name(new_name)
path.rename(new_path)
print(f"已将 '{path.name}' 重命名为 '{new_name}'")
except Exception as e:
print(f"重命名失败: {path.name} - {str(e)}")
if __name__ == "__main__":
directory = input("请输入要处理的目录路径 (直接回车处理当前目录): ").strip()
if not directory:
directory = '.'
mode = input("请选择模式 (1=用下划线替换, 2=完全去除): ").strip()
mode = 'replace' if mode == '1' else 'remove'
rename_files(directory, mode)
print("\n处理完成!")
使用方法
Linux/macOS:
# 保存脚本到文件 chmod +x rename.sh # 添加执行权限 ./rename.sh # 运行
Windows 批处理:
- 将代码保存为
.bat文件 - 双击运行或在命令行中执行
PowerShell:
# 直接复制粘贴到 PowerShell 窗口中运行 .\rename.ps1
注意事项
- 备份重要数据:运行前建议备份文件
- 测试环境:先在小范围测试,确认无误后再处理大文件集
- 特殊字符:确保文件名不包含其他特殊字符导致无法重命名
- 文件占用:确保文件未被其他程序占用
选择最适合您需求的脚本即可,建议先用 echo 打印预览结果,确认无误后再执行实际的 mv/ren 操作。