batch file ascii码在线 在批处理文件中循环使用ASCII代码



ascii数据 (4)

我想在没有for %%J in (ABCDEFGHIJKLMNOPQRSTU VWXYZ) do echo %%J输入for %%J in (ABCDEFGHIJKLMNOPQRSTU VWXYZ) do echo %%J A到Z,而是输出这样长而且无用的命令。 所以我想知道如果我可以通过ASCII码循环。 类似于for %%J in (ASCII of A ie.65 to Z) do echo %%J

任何帮助,将不胜感激。

https://ffff65535.com


在批处理文件中循环使用ASCII代码

任何批量解决方案都可以做到你想要的,比现有的要复杂得多。

考虑使用PowerShell代替:

for($i=65;$i -le 90; $i++){[char]$i}

示例输出:

PS F:\test> for($i=65;$i -le 90; $i++){[char]$i}
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

令人惊讶的是,有一个解决方案使用了一个名为=ExitCodeAscii的未公开的内置环境变量 ,它保存了当前退出代码1ErrorLevel )的ASCII字符:

@echo off
for /L %%A in (65,1,90) do (
    cmd /C exit %%A
    call echo %%^=ExitCodeAscii%%
)

for /L循环遍历AZ的(十进制)字符代码。 cmd /C exit %%A将返回码( ErrorLevel )设置为当前迭代的代码,之后将其作为字符进行echocall与double- % signs一起为命令行引入了第二个解析阶段,以便获得当前值=ExitCodeAscii而不是整个for /L循环执行之前的当前值(这会发生在简单命令行如echo %=ExitCodeAscii% )。 或者,也可以使用延迟扩展

基本的想法是记入rojo和适用于这个职位: 我如何得到批量随机信件输出 。

1)退出代码(或返回代码)不一定与ErrorLevel值相同。 但是,命令行cmd /C exit 1将这两个值设置为1 要确保退出代码等于ErrorLevel ,请使用类似cmd /C exit %ErrorLevel%


最简单的解决方案是将这个PowerShell单线程包含在bat脚本中:

powershell "65..90 | %{ [char]$_ }"

虽然这不一定是最快的。

这里有一个类似于Hackoo 's的VBScript解决方案,但是其混合格式不依赖于编写外部.vbs文件。 用.bat扩展名保存。 cscript行是什么触发VBScript混合代码的执行。

<!-- : batch portion
@echo off & setlocal

cscript /nologo "%~f0?.wsf"
goto :EOF

: VBScript -->
<job>
    <script language="VBScript">
        For i = 65 to 90
            WSH.Echo(Chr(i))
        Next
    </script>
</job>

或者,如果您更熟悉JavaScript语法,则可以使用Batch + JScript混合。

@if (@CodeSection == @Batch) @then
@echo off & setlocal

cscript /nologo /e:JScript "%~f0"
goto :EOF

@end // end Batch / begin JScript

for (var i=65; i<=90; i++) WSH.Echo(String.fromCharCode(i));

这个答案是以前给出的方法的汇编和比较。

在这个问题中,OP请求在批处理文件中回显A到Z的字母。 如果解决方案的目的不只是显示字母 ,而是以任何其他方式处理字母,那么= ExitCodeAscii变量方法是唯一一个用批处理代码做的,尽管在其他两种方法中需要进行修改同样很简单。

下面的代码包括三种方法,并以最简单的方式比较它们:通过每个人完成所需的时间。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "start=%time%"
for /L %%a in (65,1,90) do (
    cmd /C exit %%a
    call echo Batch: %%^=ExitCodeAscii%%
)
echo First method: using =ExitCodeAscii variable
echo Start: %start%
echo End:   %time%
echo/

set "start=%time%"
for /F %%a in ('powershell "65..90 | %%{ [char]$_ }"') do echo PS: %%a
echo Second method: using PowerShell
echo Start: %start%
echo End:   %time%
echo/

set "start=%time%"
for /F %%a in ('cscript //nologo //E:JScript "%~F0"') do echo JScript: %%a
echo Third method: using JScript
echo Start: %start%
echo End:   %time%

goto :EOF

@end

for (var i=65; i<=90; i++) WSH.Echo(String.fromCharCode(i));

此代码的几次执行显示一致的结果:PowerShell方法是最慢的,= ExitCodeAscii方法运行速度比PowerShell快280%,JScript方法运行速度比ExitCodeAscii快240%。 这些差异会随着整个程序的增长和执行更多的东西而不仅仅是显示字母而消失,但在标准/小批处理文件中,这个关系总是相同的:PowerShell是最慢的方法,JScript是最快的方法。 VBScript方法类似于JScript。





ascii