Это очень сложная задача, поскольку символ en dash - это кодовая точка Unicode U + 2013.В стандартном командном процессоре Windows он использует кодовую страницу консоли 437.Символ û
является символом номер 150 в кодовой странице 437. Таким образом, похоже, что один процесс записывает файл в кодовой странице 1252, а другой - его чтение с использованием кодовой страницы 437. - Лучшее объяснение проблемы здесь
Чтобы это исправить, мы можем использовать chcp 1252
в начале скрипта, чтобы изменить кодовую страницу консоли 437 на 1252.
Поскольку мы имеем дело с символами Юникода, если выпопытайтесь вставить û
в простой редактор текстовых файлов, он изменит его на en dash .Чтобы обойти это, я использую редактор notepad ++ и меняю кодировку в редакторе (Кодировка, Наборы символов, Западноевропейский, OEM-US), чтобы редактор мог вставить символ û
,- Более подробное объяснение о проблеме здесь .
ChangeEnDashToDash.bat:
@echo off
setlocal EnableDelayedExpansion
chcp 1252>NUL
Rem | Get Each File Name
for /f "tokens=*" %%A in ('dir "*.txt" /b') do (
Rem | Get Each File Name
for /f "tokens=*" %%B in ('Echo %%A^| find /i "û"') do (
Rem | Save Original Name
Set "OriginalName=%%B"
Rem | Get New Name
SET "ModifiedName=!OriginalName:û=-%!"
Ren "!OriginalName!" "!ModifiedName!"
)
)
goto :EOF
Код, приведенный ниже, изменит любой –
на -
просто с помощью синтаксическая замена .Чтобы получить файлы .txt
, мы можем использовать цикл for
вместе с dir "*.txt" /b
.Затем с помощью Echo %%A^| find /i "û"
будут отображаться только имена файлов с –
.Оттуда мы можем установить несколько строк и переименовать их.
Если вы также хотите искать в подкаталогах, измените dir "*.txt" /b
на dir "*.txt" /b /s
.Я оставил несколько операторов rem
, чтобы помочь объяснить процесс сценария.
Для получения справки по любой из команд выполните следующее:
set /?
for /?
if /?
ren /?
- и т. Д.