【问题标题】:Variable Grid Maker可变网格制造商
【发布时间】:2012-07-04 09:36:59
【问题描述】:

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

%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

【问题讨论】:

  • 我看不到您在哪里创建变量 G1G2... 也看不到您在哪里尝试访问它们

标签: file batch-file


【解决方案1】:

我们来分析这部分:

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

and NOT 再次展开,因为 % 展开只从左到右进行了一次。结果是:

%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!
)

【讨论】:

    【解决方案2】:

    你没有在 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 等循环...

    【讨论】:

    • %COLS% 是用户指定的,如果我们实际上不知道它是什么,它怎么比 %START% 大?
    • @BaliC: COLS is not > START, START is > COLS,因为在第一行循环之后,脚本执行set /a lineid=%lineid%+%COLS%+1,它在开始执行时将 START 的值设置为 > COLS第二/第三等行上的列。在第一行,START 等于 1,所以 for 循环正在执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多