循环遍历批处理文件中的ASCII代码

Ris*_*hav 10 ascii for-loop cmd batch-file

我想回答A到Z而不输入for %%J in (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) do echo %%J如此冗长而无用的命令.所以我想知道我是否可以循环使用ASCII码.就像是for %%J in (ASCII of A ie.65 to Z) do echo %%J

任何帮助,将不胜感激.

asc*_*pfl 12

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

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

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

基本的想法归功于rojo并在这篇文章中应用:我如何批量获得随机字母输出.

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


Dav*_*ill 6

循环遍历批处理文件中的ASCII代码

任何你想做的批处理解决方案都会比你现有的要复杂得多.

请考虑使用PowerShell:

for($i=65;$i -le 90; $i++){[char]$i}
Run Code Online (Sandbox Code Playgroud)

示例输出:

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
Run Code Online (Sandbox Code Playgroud)


Aac*_*ini 5

这个答案是对之前给出的方法的汇总和比较。

在问题中,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));
Run Code Online (Sandbox Code Playgroud)

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