簡體   English   中英

如何從文件名中刪除空格(批量)

[英]How to remove spaces from file names (in bulk)

如何從 Windows 中的數千個文件中批量刪除空格(不替換為下划線)? 我可以從 DOS 命令執行此操作嗎?

目前:

file one.mp3
file two.mp3

所有文件都需要變成:

fileone.mp3
filetwo.mp3

這是一個腳本,可以有效地批量重命名文件,從名稱中去除所有空格。

: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: 驅動器上的所有文件。

在 Windows 中:

  1. 打開命令提示符。
  2. 使用 cd 命令轉到文件夾(例如:cd "paht of your folder")。
  3. 鍵入以下命令打開 powershell:powershell
  4. 然后輸入: get-childitem *.mp3 | foreach {rename-item $_ $_.name.replace(" ","")}

創建一個 powershell 文件 - *.ps1擴展名

寫下這段代碼:

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

保存,然后右鍵單擊 -> 使用 powershell 運行

您可以編寫一個簡單的腳本來為一個文件/目錄執行此操作,例如:

@echo off
setlocal enableextensions enabledelayedexpansion

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

...然后,如果您願意,可以在您關心的所有文件和/或目錄上運行它。 例如,如果您將上述腳本創建為 myrenamingscript.cmd,則可以通過運行以下命令在當前目錄中的所有非目錄文件上運行它:

for %f in (*) do @myrenamingscript.cmd "%~f"
@echo off
setlocal enableextensions enabledelayedexpansion

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

我遇到的問題是,可能已經有一個文件與您嘗試給新文件的名稱相同(例如,如果文件夾中有 2 個文件名為“file one.txt”和“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%

由於以編程方式重命名文件是有風險的(如果你弄錯了可能會造成破壞),我會使用一個專門為批量重命名而構建的帶有試運行模式的工具,例如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.

此處有更多重命名器用法示例。

在 Windows 中打開Powershell ,然后在導航到要重命名文件的文件夾后鍵入以下命令

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

我們來分析一下:

get-childitem *.mp3 這列出了名稱以 .mp3 結尾的所有文件。 然后它們通過管道傳送到下一個命令 | 操作員。

foreach { 重命名項目 $_ $_.Name.Replace(" ", "") }

這將“”的所有實例(在這種情況下為空格 || 這是要替換的實例)替換為空,由“”表示,有效地從目錄中的所有文件中擦除了該詞。

您還可以將 get-childitem *.mp3 修改為 get-childitem - 這將重命名目錄中的所有文件,而不僅僅是名稱以 .mp3 結尾的文件。

只需將其復制粘貼到批處理文件並另存為c:\\myfolder\\r.bat

setlocal EnableDelayedExpansion
@echo off &cls
set p=%*
set p=!p: =!
set p=!p:^(=!
set p=!p:^)=!
set p=!p:^[=!
set p=!p:^]=!
set p=!p:^$=!
set p=!p:^&=!
set p=!p:^@=!
set p=!p:^;=!
set p=!p:^:=!
set p=!p:^,=!
set p=!p:^#=!
set p=!p:^_=!
set p=!p:^-=!
set e=%p:~-4%
ren "%*" %time:~6,2%%time:~9,2%%e%
exit

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\#myRENAME]
@=""

[HKEY_CLASSES_ROOT\*\shell\#myRENAME\command]
@="c:\myfolder\r.bat \"%1\""

完成,現在選擇文件並右鍵單擊選擇myRENAME所有文件將立即重命名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM