在Windows中echo -e等效?

ccy*_*ccy 8 windows batch-file echo

在Windows中是否有任何Linux"echo -e"等效,所以我可以使用"echo -e\xnnn"打印出ASCII码为十六进制值nnn的字符?

jeb*_*jeb 12

没有等价物,但你可以编写自己的功能.

我会将问题分成两部分.

  • 将十六进制数转换为十进制数.
  • 将十进制数转换为ASCII.

从十六进制转换为十进制很简单

set "myHex=4A"
set /a decimal=0x%myHex%
Run Code Online (Sandbox Code Playgroud)

将数字转换为ASCII更加棘手,它取决于所需的ASCII范围
如果只需要从32(空格)到126'〜'的范围,则可以使用=ExitCodeAscii变量

set "decimal=%1"
cmd /c exit /b %decimal%
echo "%=ExitCodeAscii%"
Run Code Online (Sandbox Code Playgroud)

如果您还需要一些特殊的字符,如CR,LF,ESC,DEL,,可以用纯批量创建.

如果你需要更多,你可以使用vbscript.

forfiles方法

更通用的方法是使用命令forfiles(Dostips:生成几乎任何字符......)

回声e.bat

@echo off
set "arg1=%~1"
set "arg1=%arg1:\x=0x%"
forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(%arg1%"
Run Code Online (Sandbox Code Playgroud)

您可以通过调用它echo-e.bat "Hello\x01\x02\x03" ,你会得到Hello???.

  • 谢谢你的提示!很高兴了解`%= ExitCodeAscii%`和其他模糊的[动态环境变量](http://www.robvanderwoude.com/ntset.php#DynamicEnvironmentVariables)... (3认同)
  • 出于某种原因,直到现在,"众所周知的"`= ExitCodeAscii`对我来说是隐藏的.:)感谢这一伟大的知识! (2认同)

tim*_*den 5

Dave Benham编写了一个名为CharLib的批处理文件字符操作库.除其他外,该库能够将十六进制转换为ascii,适用于1..255范围内的所有字符(不能为0 - > NUL).

有关详细信息,请参阅线程是否可以将字符转换为ASCII值?DosTips.com上

如果您只需要在批处理脚本中使用单个有问题的字符(例如控制代码),那么它是剪切和粘贴的宝贵资源.

例如,在批处理脚本中打印CR字符(不带LF)...

@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
echo 1234567890!ASCII_13!xxxxxx
Run Code Online (Sandbox Code Playgroud)

最终会按预期在控制台上打印"xxxxxx7890".