1

Иногда значение переменной %COMPUTERNAME% содержит не-ASCII-символы, но когда я использую эту переменную в пакетном скрипте, мне нужно сохранить только ASCII-символы коррелированного значения.

Как можно получить строковое значение с не-ASCII-символами, чтобы отображать только ASCII-символы с помощью пакетного скрипта?

1 ответ1

1

Вы можете использовать некоторые из методов, перечисленных в разделе Удаление специальных символов из строки, используя регулярное выражение (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

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .