我对批处理很新,我一直在努力编写一些简单的排序程序。这个程序使用最基本的排序系统,代码(我可以看到)似乎没有错误。然而,当我运行它时,会生成一个随机列表,似乎正在进行一些排序,然后数组中填充了字母" m"。我不明白为什么会这样,所以如果有人能指出我正确的方向,我会非常感激。
我的代码:
@echo off
color b
title sorting
set ar=0
set num=0
set check=0
set checknum=0
set totalnumber=500
set randmax=5000
:array
if %num% LSS %totalnumber% (
set /A a[%num%]=%random% %% %randmax%
set /A num=%num%+1
goto array
)
if %num% EQU %totalnumber% (
goto echo1
)
:echo1
for /F "tokens=2 delims==" %%s in ('set a[') do echo %%s
echo sort initialized
goto sort
)
:sort
set n=0
:sortloop
set /A m=%n%+1
if %n% EQU %totalnumber% (
goto check
)
if %a[%n%]% GTR %a[%m%]% (
set hold=%a[%m%]%
set a[%m%]=%a[%n%]%
set a[%n%]=%hold%
set /A n=%n%+1
goto sortloop
)
if %a[%n%]% LSS %a[%m%]% (
echo a[%n%] check
set /A n=%n%+1
goto sortloop
)
:check
set check=0
set checknum=0
:checkloop
set /A checknumplus=%checknum%+1
if %check% EQU %totalnumber% (
goto complete
)
if %checknum% EQU %totalnumber% (
set n=0
goto sort
)
if %a[%checknum%]% LSS %a[%checknumplus%]% (
set /A check=%check%+1
set /A checknum=%checknum%+1
goto checkloop
)
:complete
for /F "tokens=2 delims==" %%s in ('set a[') do echo %%s
for /F "tokens=2 delims==" %%s in ('set a[') do echo %%s > sortedlist.txt
答案 0 :(得分:3)
当您需要批量使用变量内部的变量时(最常用于使用数组时),您需要使用延迟扩展。
现在,您的代码显示set hold=%a[%m%]%
。解释器将此值视为变量%a[%
(它不存在,因此它不使用任何内容),文字字符m
和变量%]%
(它也不是&{ #39; t存在,因此是空的。)
要解决此问题,请将setlocal enabledelayedexpansion
放在代码顶部,然后将set语句更改为set hold=!a[%m%]!
(并对使用它的其他行执行相同操作)。