在Windows中echo -e等效?

Windows中是否有任何Linux“echo -e”等效,所以我可以使用“echo -e \ xnnn”打印ASCII码是hex值nnn的字符?

没有等价的,但你可以写自己的功能。

我会把问题分成两部分。

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

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

set "myHex=4A" set /a decimal=0x%myHex% 

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

 set "decimal=%1" cmd /c exit /b %decimal% echo "%=ExitCodeAscii%" 

如果你还需要一些特殊的字符如CRLFESCDEL ,可以用纯批量创建它们。

如果你需要比你可以使用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%" 

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

有一个由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 

将按预期在控制台上最终打印“xxxxxx7890”。

以下是一个简单的混合批处理/ JScript文件,可用于回显任何有效的JScript表达式(包括使用\ xnn)的结果。 它支持从\ x00到\ xFF的所有字节代码。

批处理采用双引号括起来的单个参数。 参数应该是有效的JScript表达式。 双引号不是表达式的一部分。 表达式中的JScript字符串应该用单引号括起来。

默认情况下,换行符不打印在结果的末尾。 / N选项用于将新行附加到结果的末尾。

如果在批处理文件中使用,那么当然应该使用CALL调用脚本。

jEval.bat

 @if (@X)==(@Y) @end /* harmless hybrid line that begins a JScrpt comment ::: Batch part :::: @echo off cscript //nologo //e:JScript "%~f0" %* exit /b *** JScript part ***/ if (WScript.Arguments.Named.Exists("n")) { WScript.StdOut.WriteLine(eval(WScript.Arguments.Unnamed(0))); } else { WScript.StdOut.Write(eval(WScript.Arguments.Unnamed(0))); } 

这里是一个示例调用,它使用\ xnn在输出中引入一个新行,并包含一些浮点数学。

 >jEval " 'Hello world!\x0a4/5=' + 4/5 " /n Hello world! 4/5=0.8 > 

添加到什么@jeb说你可以重新创建

 echo -n -e "win\x01\x02\x03\x04" > file.exe 

 @echo off setlocal set LF=^ set "arg1=%~1" set "arg1=%arg1:\x=0x%" for /f eol^=^%LF%%LF%^ delims^= %%A in ( 'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo|set /p=%arg1%"' ) do if "%~2" neq "" (set %~2=%%A) else echo|set /p=%%A 

这变成:

 echone.bat "win\x01\x02\x03\x04" > file.exe