Как удалить пробелы из имен файлов (навалом)
Как удалить пробелы (не заменять символами подчеркивания) из нескольких тысяч файлов в объеме в Windows? Могу ли я сделать это из команды DOS?
В настоящее время
file one.mp3
file two.mp3
Все файлы должны стать:
fileone.mp3
filetwo.mp3
Ответы
Ответ 1
Вот script, который может эффективно переименовывать файлы, удаляя все пробелы из имени.
: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
)
)
Предположим, что script называется renameNoSpace.bat
renameNoSpace
: (нет аргументов) Переименовывает файлы в текущем каталоге
renameNoSpace /R
: переименовывает файлы в дереве папок, внедренном в текущий каталог
renameNoSpace myFolder
: Переименовывает файлы в каталоге "myFolder", найденном в текущем каталоге.
renameNoSpace "c:\my folder\"
: Переименовывает файлы по указанному пути. Цитаты используются, потому что путь содержит пробел.
renameNoSpace /R c:\
: Переименовывает все файлы на диске C:.
Ответ 2
Создайте файл powershell - *.ps1
extension
Введите этот код:
dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" }
сохранить, затем щелкнуть правой кнопкой мыши → запустить с помощью powershell
Ответ 3
@echo off
setlocal enableextensions enabledelayedexpansion
for %%f in (*.*) do (
set ARG=%%~nxf
rename "%%f" !ARG: =!
)
Ответ 4
Вы можете написать простой script, который делает это для одного файла/каталога, например:
@echo off
setlocal enableextensions enabledelayedexpansion
set "ARG=%~1"
ren "%ARG%" "%ARG: =%"
... а затем, если хотите, запустите его по всем файлам и/или справочникам, о которых вы заботитесь. Например, если вы создаете вышеуказанный script как myrenamingscript.cmd, вы можете запускать его по всем не-dir файлам в текущем каталоге, запустив:
for %f in (*) do @myrenamingscript.cmd "%~f"
Ответ 5
Проблема, с которой я столкнулся, заключается в том, что существует вероятность того, что уже есть файл с именем, которое вы пытаетесь передать новому файлу (например, если в папке с именем "файл one.txt" есть 2 файла "и" file_one.txt ", когда вы пытаетесь заменить пробелы символами подчеркивания, один файл заменит другой). Поэтому я сделал этот script, который проверяет, существует ли новое имя и если оно помещает число в конце имени файла (добавляет 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
В Windows:
- Откройте командную строку.
- Перейдите в папку с помощью команды cd (например, cd "paht of your folder").
- Откройте PowerShell, набрав: powershell
- Затем введите это: get-childitem *.mp3 | foreach {rename-item $ _ $ _. name.replace("", "")}