如何从文件名中删除空格(批量)

时间:2012-06-30 00:22:21

标签: windows batch-file renaming

如何在Windows中批量删除数千个文件中的空格(不能用下划线替换)?我可以从DOS命令执行此操作吗?

目前:

file one.mp3
file two.mp3

所有文件都需要成为:

fileone.mp3
filetwo.mp3

8 个答案:

答案 0 :(得分:72)

这是一个可以有效批量重命名文件的脚本,从名称中删除所有空格。

:renameNoSpace  [/R]  [FolderPath]
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
  set "forOption=%~1 %2"
  set "inPath="
) else (
  set "forOption="
  if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
  if /i "%~f0" neq "%%~fF" (
    set "folder=%%~dpF"
    set "file=%%~nxF"
    setlocal enableDelayedExpansion
    echo ren "!folder!!file!" "!file: =!"
    ren "!folder!!file!" "!file: =!"
    endlocal
  )
)

假设脚本名为 renameNoSpace.bat

renameNoSpace :(无参数)重命名当前目录中的文件

renameNoSpace /R:重命名以当前目录为基础的文件夹树中的文件

renameNoSpace myFolder:重命名当前目录中“myFolder”目录中的文件。

renameNoSpace "c:\my folder\":重命名指定路径中的文件。使用引号是因为路径包含空格。

renameNoSpace /R c:\:重命名C:驱动器上的所有文件。

答案 1 :(得分:8)

创建一个powershell文件 - *.ps1扩展名

编写此代码:

dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" }

保存,然后右键单击 - >与powershell一起运行

答案 2 :(得分:4)

@echo off
setlocal enableextensions enabledelayedexpansion

for %%f in (*.*) do (
set ARG=%%~nxf
rename "%%f" !ARG: =!
)

答案 3 :(得分:3)

您可以为一个文件/目录编写一个简单的脚本,例如:

@echo off
setlocal enableextensions enabledelayedexpansion

set "ARG=%~1"
ren "%ARG%" "%ARG: =%"

...然后如果您愿意,请在您关注的所有文件和/或目录上运行它。例如,如果您将上述脚本创建为myrenamingscript.cmd,则可以通过运行以下命令在当前目录中的所有非dir文件上运行:

for %f in (*) do @myrenamingscript.cmd "%~f"

答案 4 :(得分:1)

在 Windows 中打开 Powershell,然后在导航到要重命名文件的文件夹后键入以下命令

get-childitem *.mp3 | foreach { rename-item $_ $_.Name.Replace(" ", "") }

让我们分析一下:

get-childitem *.mp3 这列出了名称以 .mp3 结尾的所有文件。然后它们通过管道传送到下一个命令 |操作员。

foreach { rename-item $_ $_.Name.Replace(" ", "") }

这将替换所有“”的实例 (在这种情况下为空格 || 这是要替换的实例) 没有任何东西,用“”表示,有效地从所有目录中的文件。

您还可以将 get-childitem *.mp3 修改为 get-childitem – 这将重命名目录中的所有文件,而不仅仅是名称以 .mp3 结尾的文件。

** 注意**

如果你不喜欢上面的方法,有一个名为 Bulk Rename Utility 的很棒的软件。我个人使用过这个软件,你可以在 youtube 上得到很多如何使用它的教程。

答案 5 :(得分:0)

我遇到的问题是,有可能存在一个文件,其中包含您尝试为新文件指定的名称(例如,如果文件夹中有2个文件名为"文件为one.txt& #34;和" file_one.txt"当您尝试用下划线替换空格时,一个文件将替换另一个文件。所以我创建了这个脚本来检查新名称是否已经存在,如果是这样,那么在文件名的末尾添加一个数字(在数字之前加1,直到没有其他文件具有该名称)。有关更改内容的说明位于顶部(表示赞同)。如果使用*。*选项,请不要将批处理文件存储在要重命名文件的同一文件夹中。我希望这会有所帮助。

@echo off

REM Instructions
REM This script repaces spaces from file names with underscores. 
REM If you want to just remove the spaces uncomment lines 30 and 52 and comment out the lines 29 and 51. 
REM set the following parameters. 
REM pb is the folder containing the files we want to rename (fullpath)
REM tm is a temporary folder that will be created and deleted. Just put a folder that does not exist and is not used by anything else (fullpath).
REM all is the file type you want to raname. E.g. *.* for every file, *.txt for TXTs, *.pdf for PDFs etc 
REM you don't have to change anything else

set pb=<folder containing the files to rename>
set tm=<a temp folder that does not exist>
set all=*.*

set pa=%pb%%all%

setlocal EnableDelayedExpansion

cd /d %pa%

set /a count=1

if not exist %tm% mkdir %tm%

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name3=!name2!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

:rename

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name4=!name2!%count%
    set name3=!name4!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

set /a count = %count% + 1

set /a loop = 0

for %%F in (%pa%) do (set /a loop = 1)

if %loop% equ 1 goto rename

move /y %tm%\%all% %pb% >nul

rmdir /s /q %tm%

答案 6 :(得分:0)

在Windows中:

  1. 打开命令提示符。
  2. 使用cd命令转到文件夹(例如:cd“您的文件夹的paht”)。
  3. 通过键入以下内容打开Powershell:powershell
  4. 然后输入以下内容:get-childitem * .mp3 | foreach {重命名项目$ _ $ _。name.replace(“”,“”)}

答案 7 :(得分:0)

由于以编程方式重命名文件是有风险的(如果你弄错了可能会造成破坏),我会使用一个专门为批量重命名而构建的带有试运行模式的工具,例如renamer

此命令从当前目录中的所有文件中去除空格:

$ renamer --find "/\s/g" --dry-run *

Dry run

✔︎ file one.mp3 → fileone.mp3
✔︎ file two.mp3 → filetwo.mp3

Rename complete: 2 of 2 files renamed.

更多重命名器用法示例here