2

我一直在研究一个批处理文件,它创建了一个像这样的变量网格:

%G1%%G2%%G3%%G4%%G5% 
%G6%%G7%%G8%%G9%%G10% 
%G11%%G12%%G13%%G14%%G15% 

但是当我尝试运行我的批处理文件时,它只是这样写:

%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
4

2 回答 2

2

我们来分析这部分:

:A
set LINE=
for /l %%I in (%START%,1,%COLS%) do (
set LINE=!LINE!%%G%%I%%
)

第一次循环迭代创建:set LINE=%G1%对吗?第二次循环迭代:set LINE=%G1%%G2%等等,直到set LINE=%G1%%G2%%G3%%G4%%G5%,对吧?

现在,这一行:

echo %LINE% 

首先是这样展开的:

echo %G1%%G2%%G3%%G4%%G5%

并且不再扩展,因为 % 扩展只从左到右进行了一次。结果是:

%G1%%G2%%G3%%G4%%G5%

对不起,您没有告诉我们您希望从程序中得到什么,但是如果您希望显示变量 G1 到 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!
)
于 2012-07-05T01:24:15.817 回答
0

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

你需要改变这个:

for /l %%I in (%START%,1,%COLS%) do (

这是试图从(1-5、6-5、11-5)循环。对于这样的事情:

set /a ENDCOL = %START% + %COLS% - 1
for /l %%I in (%START%,1,%ENDCOL%) do (

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

于 2012-07-04T11:06:37.513 回答