批处理脚本+多个变量

时间:2012-05-09 13:07:55

标签: windows batch-file

我目前正在尝试编写我的第一个批处理脚本。

它的作用:

  • 它从某个文件夹中获取所有文件并将其中的每个文件放入rar

  • 它会为桌面生成一个URL快捷方式

到目前为止一切正常,但问题是:我想创建具有唯一网址的快捷方式。现在我只是通过脚本传递URL:

script.bat http://example.com

脚本执行以下操作:

SET LINK        =%1

::For each file that is in the dir "Ori"
FOR %%i IN (%BASEPATH%\Ori\*.*) DO (

    echo [InternetShortcut] > "%BASEPATH%\New\%%~ni.URL"
    echo URL=%LINK% >> "%BASEPATH%\New\%%~ni.URL"
    echo IconFile=%LINK%/favicon.ico >> "%BASEPATH%\New\%%~ni.URL"
    echo IconIndex=0 >> "%BASEPATH%\New\%%~ni.URL"

)

当然,所有快捷方式都会导致http://example.com

我希望能够为正在创建的每个快捷方式定义唯一的URL。

由于我是一个初学者,我真的不知道从哪里开始......并且希望得到一个建议!

P.S。只是为了让你知道我需要什么,但这不起作用:

script.bat {http://example.com,http://example1.com,http://example2.com}

并且脚本应该使用URL 1作为第一个快捷方式,URL 2作为第二个快捷方式,依此类推。

更新

现在按照下面的jeb答案工作正常。但是,我想知道:是否有可能再次使用另一个变量做同样的工作?所以看起来有点像这样:

script.bat http://example.com http://example1.com http://example2.com NewVar1 NewVar2 NewVar3

NewVar应该像以下一样保存:

SET NEWVAR=%2

如何在URL变量完成且NewVar变量开始时知道脚本?

而不是被称为

!NEWVAR!

1 个答案:

答案 0 :(得分:3)

使用SET时应避免使用空格,否则使用空格创建变量名称!

您可以使用SHIFT命令枚举所有参数。

然后你可以使用像

这样的东西
script.bat http://example.com http://example1.com http://example2.com

setlocal EnableDelayedExpansion
SET LINK=%1

::For each file that is in the dir "Ori"
FOR %%i IN (%BASEPATH%\Ori\*.*) DO (

    echo [InternetShortcut] > "%BASEPATH%\New\%%~ni.URL"
    echo URL=!LINK! >> "%BASEPATH%\New\%%~ni.URL"
    echo IconFile=!LINK!/favicon.ico >> "%BASEPATH%\New\%%~ni.URL"
    echo IconIndex=0 >> "%BASEPATH%\New\%%~ni.URL"
    shift
    call set link=%%1

)

SHIFT将移动所有参数,因此下次访问%1时,您将获得下一个参数 但是当你在一个区块中时,你无法直接访问当前%1,所以我在这里使用CALL %%技巧。

要访问块中LINK的当前值,我使用了延迟扩展(!Link!)。