Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 多行批处理文件打印中的奇怪错误_Batch File - Fatal编程技术网

Batch file 多行批处理文件打印中的奇怪错误

Batch file 多行批处理文件打印中的奇怪错误,batch-file,Batch File,我一直在为自己做一个项目,它批量生成一个网格,可以访问和修改特定的点,以便通过批量游戏等获得更好的图形 @echo关闭 setlocal ENABLEDELAYEDEXPANSION !x! ::::::::::: ::别名: ::::::::::: :@别名 设置x=退出/b 后藤:@main !x! ::::::::::: ::MAIN:: ::::::::::: :@main 电话:$Canvas\u Canvas 16。 设置px=%~1 设置py=%~2 设置_canvas_point

我一直在为自己做一个项目,它批量生成一个网格,可以访问和修改特定的点,以便通过批量游戏等获得更好的图形

@echo关闭
setlocal ENABLEDELAYEDEXPANSION
!x!
:::::::::::
::别名:
:::::::::::
:@别名
设置x=退出/b
后藤:@main
!x!
:::::::::::
::MAIN::
:::::::::::
:@main
电话:$Canvas\u Canvas 16。
设置px=%~1
设置py=%~2
设置_canvas_point[!px!][!py!]=#
!_帆布画!
!x!
:::::::::::
::对象::
:::::::::::
:@objects
!x!
:$Canvas
设置此=%~1
设置/a!这个_宽度=%~2
设置/a!这个_高度=%~3
设置这个_默认字符=%~4
设置这个#draw=调用:#$canvas_proto_draw!这
对于/L%%i in(1,1,!%this%\u高度!),请执行以下操作(
对于/L%%j英寸(1,1,!%this%\u宽度!),请执行以下操作(
设置!此!\u点[%%j][%%i]=!%this%\u默认字符!
设置!此!_行[%%i]=!%this%_行[%%i]!!%this%_点[%%j][%%i]!
)
)
!x!
:#$Canvas_proto_draw
设置此=%~1
对于/L%%i in(1,1,!%this%\u高度!),请执行以下操作(
对于/L%%j英寸(1,1,!%this%\u宽度!),请执行以下操作(
设置!此!_行[%%i]=!%this%_行[%%i]!!%this%_点[%%j][%%i]!
)
)
对于/L%%i in(1,1,!%this%\u高度!),请执行以下操作(
回显!%this%\u行[%%i]!
)
!x!
我的问题出现在最终输出上:给它
1,1
将导致一个点显示在顶行的中间。我不知道为什么会发生这种情况,需要帮助。我已经在echo打开的情况下仔细检查了所有输出,值
\u canvas\u point[1][1]
确实获得了更新时的值

以下是输出:

C:\Home>canvas 1
................#...............
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
C:\Home>
是一个pastebin链接,其输出上有
@echo

快速事件: 是的,这是在批处理文件中进行面向对象编程的微弱尝试 是的,我知道其他语言更适合做这类事情,我只想用批处理文件
是的,我有一些奇怪的风格选择,比如名字和标签等等。这是为了让我能更好地阅读它,因为标签用于转到位置和函数标签。

也许下面的示例更接近您要实现的目标(面向对象的.BAT文件方法):

In:#$Canvas_proto_draw

:#$Canvas_proto_draw
set this=%~1
for /L %%i in (1, 1, !%this%_height!) do (
 SET "!this!_row[%%i]="
 for /L %%j in (1, 1, !%this%_width!) do (
...

您可能会发现显示的数据是32列x 16行。这是由于在添加值之前没有清除每一行造成的。

谢谢您的帮助。我理解这种方法没有多大意义,但感谢您的帮助:)
:#$Canvas_proto_draw
set this=%~1
for /L %%i in (1, 1, !%this%_height!) do (
 SET "!this!_row[%%i]="
 for /L %%j in (1, 1, !%this%_width!) do (
...