我目前正在尝试编写我的第一个批处理脚本。
它的作用:
它从某个文件夹中获取所有文件并将其中的每个文件放入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!
答案 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!
)。