Вы можете использовать некоторые из методов, перечисленных в разделе Удаление специальных символов из строки, используя регулярное выражение (Regex) с пакетным сценарием, как, например, приведенный ниже.
Просто используйте встроенную мощь Windows, разработанную Microsoft, и выполните эту работу, просто используя PowerShell в своем пакетном скрипте, чтобы установить %computername%
без символа, отличного от ASCII, для того, что возвращается с помощью команд PowerShell.
Пакетный скрипт для удаления не-Ascii
Обязательно установите переменную SET PCName=
соответственно в своем скрипте для включения, однако ваша логика уже работает (например, SET PCName=%computername%
и т.д.)
Вместо того, чтобы использовать DO ECHO %%~F
с циклом FOR /F
в приведенном ниже скрипте, вы можете вместо этого установить для него значение DO SET PCNameASCII=%%~F
а затем переменная %PCNameASCII%
может быть включена в остальные соответственно вашей логики пакетного скрипта, и это всегда будет значение переменной %ComputerName%
но только символы ASCII.
@ECHO ON
SET PCName=Laäff¥yTaäffi¡
SET PSScript=%Temp%\~tmpRemovenonascii.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $String = '%PCName%' >>"%PSScript%"
ECHO $String = $String -replace '[^^\x30-\x39\x41-\x5A\x61-\x7A]+', ''>>"%PSScript%"
ECHO ECHO $String >>"%PSScript%"
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
FOR /F "TOKENS=*" %%F IN ('Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"') DO ECHO %%~F
PAUSE
GOTO EOF
См. Раздел « Дополнительные ресурсы » и примечания к нему о других методах, использующих Regex для удаления специальных символов и т.д.
До (не ascii)
LaõffÑyTaõffií
После (результаты)
LaffyTaffi
Дополнительные ресурсы