在Windows中是否有任何Linux“echo -e”等效,所以我可以使用“echo -e \ xnnn”打印出ASCII码为十六进制值nnn的字符?
答案 0 :(得分:12)
没有等价物,但你可以编写自己的功能。
我会将问题分成两部分。
简单地从十六进制转换为十进制
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: Generate nearly any character...)
<强>回波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☺☻♥
。
答案 1 :(得分:5)
Dave Benham编写了一个名为CharLib的批处理文件字符操作库。 除其他外,该库能够将十六进制转换为ascii,适用于1..255范围内的所有字符(不能为0 - > NUL)。
有关详细信息,请参阅主题是否可以将字符转换为ASCII值? DosTips.com
如果您只需要在批处理脚本中使用单个有问题的字符(例如控制代码),那么它就是剪切和粘贴的宝贵资源。
e.g。在批处理脚本中打印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”。
答案 2 :(得分:2)
这是一个简单的混合批处理/ 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
>
答案 3 :(得分:1)
添加@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