在Windows中是否有任何Linux“echo -e”等效,所以我可以使用“echo -e \ xnnn”打印ASCII码是hex值nnn的字符?
没有等价的,但你可以写自己的功能。
我会把问题分成两部分。
从十六进制转换为十进制很简单
set "myHex=4A" set /a decimal=0x%myHex%
将一个数字转换为ASCII码更为棘手,这取决于所需的ASCII范围
如果你只需要从32(空格)到126'〜'的范围,你可以使用=ExitCodeAscii
变量
set "decimal=%1" cmd /c exit /b %decimal% echo "%=ExitCodeAscii%"
如果你还需要一些特殊的字符如CR
, LF
, ESC
, DEL
,可以用纯批量创建它们。
如果你需要比你可以使用VBScript更多。
更通用的方法是使用命令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