如何通过批处理将特定符号转换为Unicode传入PowerShell
批处理转义特殊字符为Unicode以兼容PowerShell
核心思路
直接借助PowerShell的字符串处理能力完成特殊字符的Unicode转义,比纯批处理实现更可靠,无需手动处理复杂的字符编码逻辑。
实现代码
@echo off setlocal enabledelayedexpansion :: 替换为实际目标文件夹路径,也可通过命令行参数传入(如%1) set "target_dir=blabla_-_blabla's_bla" :: 调用PowerShell将非拉丁字母、下划线、连字符的字符转为Unicode编码格式 for /f "delims=" %%i in ('powershell -Command "$dir='%target_dir%'; $dir -creplace '[^a-zA-Z_\-]', { '`u{0:x4}' -f [char]::ConvertToUtf32($_.Value, 0) }"') do set "escaped_dir=%%i" :: 将转义后的目录名传入你的目标PowerShell代码,以下为示例 powershell -Command "Write-Host '处理后的目录:%escaped_dir%'" endlocal
代码说明
setlocal enabledelayedexpansion:开启延迟扩展,避免字符串中的特殊字符干扰批处理变量解析- PowerShell正则替换:
[^a-zA-Z_\-]匹配所有非允许字符,通过脚本块将每个匹配字符转换为uXXXX格式的Unicode编码(比如撇号'会转为'u0027') for /f:捕获PowerShell的输出结果,赋值给批处理变量escaped_dir,供后续调用PowerShell时使用
注意事项
- 正则表达式中的连字符
-需要转义为\-,否则会被当作字符范围的边界 - 如果目标路径包含双引号,需要在批处理中对双引号做额外转义(比如替换为
") - 若通过命令行参数传入文件夹路径,直接将
target_dir设为%1即可
内容的提问来源于stack exchange,提问作者Aleksandr Podaruev
相关产品推荐
相关产品推荐

