批量去除文件名空格的脚本

wen 实用脚本 2

本文目录导读:

批量去除文件名空格的脚本

  1. Linux/macOS (Bash 脚本)
  2. Windows (批处理文件 .bat)
  3. Windows PowerShell 脚本
  4. Python 脚本
  5. 使用方法
  6. 注意事项

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 批处理:

  1. 将代码保存为 .bat 文件
  2. 双击运行或在命令行中执行

PowerShell:

# 直接复制粘贴到 PowerShell 窗口中运行
.\rename.ps1

注意事项

  1. 备份重要数据:运行前建议备份文件
  2. 测试环境:先在小范围测试,确认无误后再处理大文件集
  3. 特殊字符:确保文件名不包含其他特殊字符导致无法重命名
  4. 文件占用:确保文件未被其他程序占用

选择最适合您需求的脚本即可,建议先用 echo 打印预览结果,确认无误后再执行实际的 mv/ren 操作。

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