
Я новичок в пакетном написании сценариев.
Есть решения по этому вопросуLinux и MacOS, но мне это нужно для Windows.
У меня есть следующее, которое работает только со специальными символами !@#$%^&*~ и т. д., в основном теми, которые вы видите на клавиатуре. Но мне нужно удалить специальные символы, такие как Â и °. Следующие скрипты не работают с этими двумя конкретными символами., скрипт, который я могу запустить через cmd. Естьэтотно он не совместим с windows7 cmd.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:#=!"
ren "!fname!" "!nname!"
endlocal
)
И следующее, которое может удалить пробелы только в именах файлов
@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
)
)
решение1
Ваш первый скрипт сработал у меня, если вы учтете тот факт, что для вашего скрипта необходимо использовать кодовую страницу 437.
Вставьте приведенный ниже скрипт в Блокнот. Сохраните как test.bat с кодировкой ANSI.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *ø*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:ø=!"
ren "!fname!" "!nname!"
endlocal
)
Приведенный выше скрипт будет переименован degree°.txt
в degree.txt
.
ø используется, потому что это Unicode U+00F8
. Символ градуса находится 0xF8
в кодовой странице 437.
 не появляется в кодовой странице 437, поэтому я не знаю о параллельном решении. Вероятно, требуетсяизмените кодовую страницу, как указано в этом ответечтобы сделать это правильно. Вот попытка пакетного файла, который включает изменение кодовой страницы.
echo Ignore the error displayed below
@echo off &setlocal
chcp 65001>nul
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *Â*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:Â=!"
ren "!fname!" "!nname!"
endlocal
)
Вставьте вышеприведенное в файл Блокнота и сохраните с кодировкой UTF-8. Необходимо включить первую строку скрипта, поскольку пакетный файл выдаст ошибку при первоначальной обработке файла UTF-8.
решение2
Хотел бы я приписать себе это, но это было то, на что я наткнулся случайно. Я не могу найти пост, в котором я это нашел, так что это по памяти.
find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *
Вам, возможно, придется немного поиграться с этим, я просто отвлекся на пару минут от своего проекта, чтобы опубликовать это. Поделитесь своими результатами, пожалуйста.