it-swarm.com.ru

Как убрать пробелы из имен файлов (навалом)

Как удалить пробелы (не заменять подчеркиванием) из нескольких тысяч файлов в Windows? Могу ли я сделать это с помощью команды DOS?

В настоящее время:

file one.mp3
file two.mp3

Все файлы должны стать:

fileone.mp3
filetwo.mp3
20
Nick Kahn

Вот скрипт, который может эффективно переименовывать файлы, убирая все пробелы из имени.

: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 :.

70
dbenham

Создайте файл powershell - расширение *.ps1

Напишите этот код:

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

сохранить, затем щелкнуть правой кнопкой мыши -> запустить с powershell

8
bogudoby
@echo off
setlocal enableextensions enabledelayedexpansion

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

Вы можете написать простой скрипт, который делает это для одного файла/каталога, например:

@echo off
setlocal enableextensions enabledelayedexpansion

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

... а затем, если хотите, запустите его для всех файлов и/или каталогов, которые вам нужны. Например, если вы создадите вышеупомянутый скрипт как myrenamingscript.cmd, вы можете запустить его для всех файлов, не являющихся каталогами, в текущем каталоге, выполнив:

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

Проблема, с которой я столкнулся, заключается в том, что существует вероятность того, что уже существует файл с именем, которое вы пытаетесь присвоить новому файлу (например, если в папке есть 2 файла с именами «file one.txt» и «file_one.txt») msgstr "при попытке заменить пробелы подчеркиванием один файл заменит другой). Поэтому я создал этот скрипт, который проверяет, существует ли новое имя, и, если это так, помещает число в конце имени файла (добавляет 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%
0
Mike_Gre