[英]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 中:
創建一個 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%
在 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.