有时%COMPUTERNAME%
变量值包含非 ASCII 字符,但是当我在批处理脚本中使用此变量时,我只需要保留相关值的 ASCII 字符。
如何使用批处理脚本获取包含非 ASCII 字符的字符串值以便仅显示 ASCII 字符?
答案1
您可以使用以下列出的一些方法使用正则表达式(Regex)从字符串中删除特殊字符使用如下的批处理脚本为例。
只需使用 Windows 的原生功能即可微软只需在批处理脚本中使用 PowerShell 设置%computername%
PowerShell 命令返回的非 ASCII 字符即可完成此作业。
删除非 ASCII 字符的批处理脚本
SET PCName=
请确保在脚本中相应地设置变量,以便与您的逻辑已经起作用的方式相结合(例如SET PCName=%computername%
,等等)
您可以将其设置为,而不是使用下面脚本中的循环,DO ECHO %%~F
然后可以将变量合并到其余批处理脚本逻辑中,并且它始终是变量值,但仅仅是 ASCII 字符。FOR /F
DO SET PCNameASCII=%%~F
%PCNameASCII%
%ComputerName%
@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
更多资源
- 代替()
- 为/F
# Regular Expression - Using the \W (opposite of \w) $String -replace '[\W]', '' # Regular Expression - Using characters from a-z, A-Z, 0-9 $String -replace '[^a-zA-Z0-9]', '' # Regular Expression - Using ASCII $String -replace '[^\x30-\x39\x41-\x5A\x61-\x7A]+', '' # Regular Expression - Unicode - Matching Specific Code Points $String -replace '[^\u0030-\u0039\u0041-\u005A\u0061-\u007A]+', '' # Regular Expression - Unicode - Unicode Categories $String -replace '[^\p{L}\p{Nd}]', '' # Regular Expression - Unicode - Unicode Categories # Exceptions: We want to keep the following characters: ( } _ $String -replace '[^\p{L}\p{Nd}/(/}/_]', ''