Как удалить определенные символы или заменить определенные символы другими символами с помощью какого-либо исполнения пакетного файла, для файлов всех файлов в папке Windows за один раз, есть ли для этого команда DOS?
Заменить или удалить определенные символы из файлов всех файлов в папке
Ответ 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 /?
в командной строке для получения дополнительной справки.