批处理脚本中的数组、链表和其他数据结构

80

我在使用cmd.exe时,发现它的帮助文档中没有提供如何定义数组的信息。

我已经找到了如何定义简单变量的方法:

set a=10
echo %a%

我想创建数组、链表等数据结构,但是在cmd.exe中是否可以实现呢?(我的意思是:cmd.exe中是否存在任何数组关键字?)

我想要实现一些算法,例如:

  • 冒泡排序
  • 快速排序
  • 侏儒排序

等等...

因此,我还想知道,Cmd.exe是否有参考或实例、结构体等内容?

因为它的帮助信息并不充分:/?

Cmd.exe能否根据图灵机的定义被定义为完整的?(图灵完备)


2
@MatteoItalia Linux shell 有这个功能,PowerShell(基于 .NET)也有,不确定 Windows 的 CScript.exe 是否有此功能。 - user1131997
12个回答

-1

我之前使用过的一种方法是将文件用作数组,将文件夹用作数组字典。

现在请听我解释 - 虽然一开始可能看起来很愚蠢,但它确实有一些优点。

这个想法是将文件视为数组,甚至支持使用FOR命令进行本地、易于使用的数组迭代。

array.txt

these
are
items
in
an
array

对于一个二维数组,您可以使用类似上面的文件夹。 (例如,像0.txt100.txt这样的名称)。请记住,您可能需要有一个单独的文件来索引这些,因为数组目录不一定按您在for循环中期望的方式排序,而且更像是哈希映射,其中是string -> [string]

或者,我相信解析csv也不会太难(请记住逗号和字符串值内的制表符!;))


对于一个混合数组(其中一些项是其他数组,一些是字符串),您可以使用类似以下格式的文件:

complex-array.txt

"value
"1
"2
\path.txt
\path2.txt

以及像这样的文件夹:

complex-array\path.txt
complex-array\path2.txt

如果一行以一个字符开头,则它是一个值,如果以另一个字符开头,则它是一个路径(可能相对于此文件)。当然,这可能是递归的。


不过有一个大问题。该脚本会留下文件,每次运行前(可能)需要清理这些文件。(我说“可能”是因为不能保证在脚本运行时电脑不会被拔掉电源)。

我对此的性能影响不确定,并且批处理本来就很慢,所以也许这并不重要。 (我相当肯定变量名混淆策略更快,因为值会在内存中停留更长时间)


-4
@echo off

set array=

setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

set nl=^&echo(

set array=auto blue ^!nl!^
  bycicle green ^!nl!^
  buggy   red

echo convert the String in indexed arrays

set /a index=0

for /F "tokens=1,2,3*" %%a in ( 'echo(!array!' ) do (

 echo(vehicle[!index!]=%%a color[!index!]=%%b 
 set vehicle[!index!]=%%a
 set color[!index!]=%%b
 set /a index=!index!+1   

)

echo use the arrays

echo(%vehicle[1]% %color[1]%
echo oder

set index=1
echo(!vehicle[%index%]! !color[%index%]!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接