File 可变网格生成器

File 可变网格生成器,file,batch-file,File,Batch File,我一直在处理一个批处理文件,该文件创建了一个变量网格,如下所示: %G1%%G2%%G3%%G4%%G5% %G6%%G7%%G8%%G9%%G10% %G11%%G12%%G13%%G14%%G15% set /a ENDCOL = %START% + %COLS% - 1 for /l %%I in (%START%,1,%ENDCOL%) do ( 但是,当我尝试运行批处理文件时,它只会写入以下内容: %G1%%G2%%G3%%G4%%G5% Echo is off. Echo

我一直在处理一个批处理文件,该文件创建了一个变量网格,如下所示:

%G1%%G2%%G3%%G4%%G5% 
%G6%%G7%%G8%%G9%%G10% 
%G11%%G12%%G13%%G14%%G15% 
set /a ENDCOL = %START% + %COLS% - 1
for /l %%I in (%START%,1,%ENDCOL%) do (
但是,当我尝试运行批处理文件时,它只会写入以下内容:

%G1%%G2%%G3%%G4%%G5%
Echo is off.
Echo is off.
Echo is off.
Echo is off.
我在这里添加了代码,有人能告诉我我做错了什么吗

@echo off
title GirdMaker
setlocal enabledelayedexpansion

set lineid=0
set COLS=0
set LINES=0
set /p LINES=Enter number of lines:
set /p COLS=Enter the number of colums:
cls
set START=1
set linecount=0
:A
set LINE=
for /l %%I in (%START%,1,%COLS%) do (
set LINE=!LINE!%%G%%I%%
)
set /a linecount=%linecount%+1
echo %LINE% 
set /a lineid=%lineid%+%COLS%+1
set START=%lineid%

if %LINES% EQU %linecount% (
pause >nul
exit
) 
goto :A

您没有调整for循环中的结束位置,因此内容永远不会在第一行之后运行(
START
已经大于
COLS
),因此
line
保留为空,并且对
echo
的调用为空

您需要更改以下内容:

for /l %%I in (%START%,1,%COLS%) do (
它试图从(1-5,6-5,11-5)循环。 对这样的事情:

%G1%%G2%%G3%%G4%%G5% 
%G6%%G7%%G8%%G9%%G10% 
%G11%%G12%%G13%%G14%%G15% 
set /a ENDCOL = %START% + %COLS% - 1
for /l %%I in (%START%,1,%ENDCOL%) do (

这样,它将从1-5、6-10、11-15等循环。

让我们分析这部分:

:A
set LINE=
for /l %%I in (%START%,1,%COLS%) do (
set LINE=!LINE!%%G%%I%%
)
第一次循环迭代创建此项:
设置行=%G1%
对吗?第二次循环迭代:
设置行=%G1%%G2%%
依此类推,直到
设置行=%G1%%G2%%G3%%G4%%G5%%
,对吗

现在,这一行:

echo %LINE% 
首先以这种方式扩展:

echo %G1%%G2%%G3%%G4%%G5%
call echo %LINE%
不再展开,因为从左到右只进行一次%展开。结果是:

%G1%%G2%%G3%%G4%%G5%
对不起,您没有告诉我们您希望从您的程序中得到什么,但是如果您希望显示变量G1到G5的值,那么您必须通过以下方式重新启动%扩展:

echo %G1%%G2%%G3%%G4%%G5%
call echo %LINE%
关于你的其他线路,你必须仔细检查限制;很明显,在这些情况下,LINE变量是空的

编辑:也许这就是你想要的

set /p LINES=Enter number of lines: 
set /p COLS=Enter the number of colums: 
set index=0
for /L %%I in (1,1,%LINES%) do (
   set LINE=
   for /L %%J in (1,1,%COLS%) do (
      set /A index+=1
      set LINE=!LINE!%%G!index!%%
   )
   call echo !LINE!
)

我看不出在哪里创建变量
G1
G2
。。。您也不尝试在何处访问它们
%COLS%
是用户指定的,但是,如果我们不知道它是什么,它怎么会大于
%START%
。@BaliC:COLS不是>开始,开始是>COLS,因为在第一行循环之后,脚本会
设置/a lineid=%lineid%+%COLS%+1
,当它开始对第二/第三个etc行上的列执行操作时,它将START to>COLS的值设置为。在第一行,START等于1,因此for循环正在执行。