Подтвердить что ты не робот

Заменить или удалить определенные символы из файлов всех файлов в папке

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

4b9b3361

Ответ 1

Используйте PowerShell, чтобы сделать что-нибудь умнее для подсказки DOS. Здесь я показал, как пакетно переименовать все файлы и каталоги в текущем каталоге, которые содержат пробелы, заменив их _ подчеркиваниями.

Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }

РЕДАКТИРОВАТЬ:
Необязательно, команда Where-Object может использоваться для фильтровать вне неприемлемых объектов для последующего командлета (command-let). Ниже приведены некоторые примеры, иллюстрирующие гибкость, которую он может вам позволить:

  • Чтобы пропустить любые файлы документа

    Dir |
    Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
  • Для обработки только каталогов (версия до версии 3.0)

    Dir |
    Where-Object { $_.Mode -match "^d" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    

    В PowerShell v3.0 появились новые флаги Dir. Вы также можете использовать Dir -Directory.

  • Чтобы пропустить любые файлы, уже содержащие символ подчеркивания (или какой-либо другой символ)

    Dir |
    Where-Object { -not $_.Name.Contains("_") } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    

Ответ 2

Команда One-liner в Windows PowerShell для удаления или переименования определенных символов будет выглядеть следующим образом. (здесь пробелы заменяются символом подчеркивания)

Dir | Rename-Item –NewName { $_.name –replace " ","_" }

Ответ 3

Ответы PowerShell хороши, но команда Rename-Item не работает в одном и том же целевом каталоге, если у ВСЕХ ваших файлов нет нежелательного символа в них (сбой, если он находит дубликаты).

Если вы похожи на меня и имели сочетание хороших имен и плохих имен, попробуйте вместо этого script (замените пробелы символом подчеркивания):

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }

Ответ 4

Этот командный файл может помочь, но он имеет некоторые ограничения. Имена символов = и% не могут быть заменены (происходит из памяти здесь), а также в именах файлов могут быть проблемы.

В этой части %newname: =_% в каждой строке нижнего блока он заменяет символ после : символом после =, так как он стоит, куча символов будет заменена символом подчеркивания.

Удалите echo, чтобы активировать команду ren, поскольку она будет просто печатать команды в окне консоли до тех пор, пока вы не выполните.

Он обрабатывает только текущую папку, если вы не добавите /s в часть команды DIR, а затем обработаете все папки под текущей.

Чтобы удалить определенный символ, удалите символ после знака =. В %newname:z=% запись вроде этого удалит все z-символы (без учета регистра).

@echo off
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a"
pause
GOTO:EOF
:next
set "newname=%~nx1"

set "newname=%newname: =_%"
set "newname=%newname:)=_%"
set "newname=%newname:(=_%"
set "newname=%newname:&=_%"
set "newname=%newname:^=_%"
set "newname=%newname:$=_%"
set "newname=%newname:#=_%"
set "newname=%newname:@=_%"
set "newname=%newname:!=_%"
set "newname=%newname:-=_%"
set "newname=%newname:+=_%"
set "newname=%newname:}=_%"
set "newname=%newname:{=_%"
set "newname=%newname:]=_%"
set "newname=%newname:[=_%"
set "newname=%newname:;=_%"
set "newname=%newname:'=_%"
set "newname=%newname:`=_%"
set "newname=%newname:,=_%"

echo ren %1 "%newname%

Ответ 5

Извините, что воскресил старую ветку. Решения, представленные здесь, великолепны, но не работают с моей проблемой, но я мог что-то упустить, так как мои навыки PowerShell похожи на то, как стучать в камни, чтобы разжечь огонь.

У меня есть папка, которая содержит много подпапок и файлов. Они названы с точками остановки вместо пробелов. например, The.Train.Goes.West

Когда я использую методы выше для замены "." с "" я получаю ошибку

"Переименовать-пункт: путь не имеет юридической формы".

Куда я иду не так?

Ответ 6

Я рекомендовал бы для этого команду rename. Введите ren /? в командной строке для получения дополнительной справки.