在 DOS 批处理脚本中填充数组

在 DOS 批处理脚本中填充数组

如何在 DOS 批处理脚本中设置数组变量?我想用要处理的文件名列表加载它。我真的想让它尽可能简单。谢谢。

答案1

我想到了:

set FILE_LIST=(file1.dll file2.exe file3.dll file4.dll file5.dll)

set BIN_PATH="C:\Program Files\My App Folder\bin"
set BAK_PATH="C:\Program Files\My App Folder\bin\Backups"
set DEV_PATH="C:\My Dev Path\bin\Debug"

for %%i in %FILE_LIST% do copy %BIN_PATH%\%%i %BAK_PATH%
for %%i in %FILE_LIST% do copy %DEV_PATH%\%%i %BIN_PATH%

几年前我做过类似的事情,所以只是需要一些时间去弄清楚。(顺便说一句,我不喜欢重新发明轮子。)现在它已经发布在这里,希望其他人也会发现它有用。

答案2

是的,您可以批量处理数组。虽然它们与 C 或 VB 中的数组不完全相同,但您可以这样做:

@echo off
setlocal enabledelayedexpansion

set  arrayline[0]=############
set  arrayline[1]=#..........#
set  arrayline[2]=#..........#
set  arrayline[3]=#..........#
set  arrayline[4]=#..........#
set  arrayline[5]=#..........#
set  arrayline[6]=#..........#
set  arrayline[7]=#..........#
set  arrayline[8]=#..........#
set  arrayline[9]=#..........#
set arrayline[10]=#..........#
set arrayline[11]=#..........#
set arrayline[12]=############

::read it using a FOR /L statement
for /l %%n in (0,1,12) do (
echo !arrayline[%%n]!
)
pause

答案3

来自 Jakash3 的博客,批量数组描述如何在命令提示符中模拟数组。

本文包含一个名为 array.bat 的批处理文件,其中包含用于处理数组的函数库。您需要选择文章中的文本并将其粘贴到 bat 文件中。

例如以下测试脚本:

@echo off
set book[0]=Avatar
set book[1]=The Green Mile
set book[2]=The Count of Monte Cristo
call array.bat add book Babo
call array.bat len book length
echo I have %length% books you can borrow.
echo Pick one:
echo.
echo 0) Avatar
echo 1) The Green Mile
echo 2) The Count of Monte Cristo
echo 3) Babo
echo.
set /p pick=
call array.bat getitem book %pick% title
echo.
echo You picked %title%.

生成以下输出:

图像

答案4

这是我之前制作的一个小型调试文件,用于在 BATCH/CMD 中测试我的 tic tac tow 游戏中的数组。它可以读取和写入数组,而无需使代码变得大而复杂。

使用很简单:

写入数组

  1. 给它一个文件或修改它以导入其他内容。
  2. 给数组命名。
  3. 你就完成了。

从数组中读取

  1. 给出数组的大小或者您想要读取的部分。
  2. 输入名称中包含 %%a 的数组名称
  3. 你就完成了。

代码:

@echo off
setlocal EnableDelayedExpansion

set ID=0

::              Reader                   ::
:: It reads the file called input.txt    ::
:: and stores it in a new variable that  ::
:: for everytime it goes over it it is a ::
:: new ID (Slot in the array).           ::

For /F %%A in (input.txt) do ( 
    set /a ID=ID+1
    set Input!ID!= %%A

    echo !ID! : %%A
)


::             Writer                     ::
:: this is to read all Slots in the array ::
:: and puts it on the screen.             ::

for /L %%a in (1,1,!ID!) do (
    echo !Input%%a!
)
pause>nul

相关内容