【问题标题】:Batch number variable setter批号变量设置器
【发布时间】:2011-03-01 06:36:59
【问题描述】:

我需要关于我正在处理的批处理文件的帮助,

基本上每次它执行一项任务时,它都应该将变量 %number% 加一,这样可以正常工作,然后再次重复执行不同的任务,直到完成。

这是它用来重复的代码

我基本上需要一种设置方式:

set svn=%svn%%number%
set svnlink=%svnlink%%number%
set svnfolder=%svnfolder%%number%

我使用的是:

if %number%==1 (
set svn=%svn1%
set svnlink=%svnlink1%
set svnfolder=%svnfolder1%)
if %number%==2 (
set svn=%svn2%
set svnlink=%svnlink2%
set svnfolder=%svnfolder2%)
if %number%==3 (
set svn=%svn3%
set svnlink=%svnlink3%
set svnfolder=%svnfolder3%)

我真的需要缩短,因为这会上升到 20+

这可能吗?如果你能帮助我,谢谢!

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    使用临时批处理文件。这可能不优雅,但它有效:

    set svn1=First text
    set svn2=Second text
    
    REM This echos the first text
    set number=1
    echo echo %%svn%number%%% > a.bat
    call a
    
    REM This echos the second text
    set number=2
    echo echo %%svn%number%%% > a.bat
    call a
    
    if exist a.bat del a.bat
    

    但请注意:要找出要在此处使用的% 的数量和顺序可能会非常困难。在示例中,%%svn%number%%% 被转换为 %svn[actual value X of variable number]%,这被转换为a.bat 内部的svnX 的实际值。

    所以你的实际代码应该是这样的:

    REM Note that number has to be set here already!
    echo set svn=%%svn%number%%% > a.bat
    echo set svnlink=%%svnlink%number%%% >> a.bat
    echo set svnfolder=%%svnfolder%number%%% >> a.bat
    call a.bat
    

    这也可以用作子程序:

    set number=1
    set returnmark=mark1
    goto setvars
    :mark1
    
    set number=45
    set returnmark=mark2
    goto setvars
    :mark2
    
    goto end
    
    :setvars
    echo set svn=%%svn%number%%% > a.bat
    echo set svnlink=%%svnlink%number%%% >> a.bat
    echo set svnfolder=%%svnfolder%number%%% >> a.bat
    call a.bat
    goto %returnmark%
    
    :end
    

    【讨论】:

      【解决方案2】:

      使用延迟扩展:

      setlocal enableextensions enabledelayedexpansion
      

      那么你可以这样:

      set svn=!svn%number%!
      set svnlink=!svnlink%number%!
      set svnfolder=!svnfolder%number%!
      

      %number% 在解析时被评估,然后你有 !svn1! 等,它们在运行命令之前被评估(! 替换 % 以延迟扩展)。

      您也可以使用未记录的技巧(但请注意,由于未记录因此不受支持,它可能会自发停止工作):

      call set svn=%%svn%number%%%
      call set svnlink=%%svnlink%number%%%
      call set svnfolder=%%svnfolder%number%%%
      

      这只是为变量访问增加了另一层间接,就像延迟扩展一样,但不需要上述功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        • 2014-09-06
        • 2018-11-18
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多