0

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

它能做什么:

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

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

到目前为止一切正常,但问题是:我想创建具有唯一 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"

)

当然这样一来,所有的 Shortcuts 都会导致http://example.com.

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

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

PS只是为了让您了解我需要什么,但这不起作用:

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

1 回答 1

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

于 2012-05-09T13:53:20.133 回答