Windows 批处理脚本+;多变量
我目前正在尝试编写我的第一批脚本 它的作用是:Windows 批处理脚本+;多变量,windows,batch-file,Windows,Batch File,我目前正在尝试编写我的第一批脚本 它的作用是: 它从某个文件夹获取所有文件,并将每个文件放入rar中 它为桌面生成URL快捷方式 到目前为止,一切正常,但问题是:我想用唯一的URL创建快捷方式。现在,我只是通过如下脚本传递URL: script.bat http://example.com script.bat http://example.com http://example1.com http://example2.com NewVar1 NewVar2 NewVar3 脚本执行以下
- 它从某个文件夹获取所有文件,并将每个文件放入rar中
- 它为桌面生成URL快捷方式
script.bat http://example.com
script.bat http://example.com http://example1.com http://example2.com NewVar1 NewVar2 NewVar3
脚本执行以下操作:
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
因为我是一个完全的初学者,我真的不知道从哪里开始。。。并希望得到一个建议
顺便说一下,我只是想告诉你我需要什么,但这不起作用:
script.bat {http://example.com,http://example1.com,http://example2.com}
然后脚本应该使用URL 1作为第一个快捷方式,URL 2作为第二个快捷方式,依此类推
更新:
下面是jeb的回答,现在它运行良好。然而,我想知道:是否有可能用另一个变量再次做同样的工作?所以看起来有点像这样:
script.bat http://example.com
script.bat http://example.com http://example1.com http://example2.com NewVar1 NewVar2 NewVar3
而NewVar应该像这样保存:
SET NEWVAR=%2
我如何让脚本知道URL变量何时完成,NewVar变量何时开始
而不是被称为
!NEWVAR!
使用
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!
) 使用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!
) 谢谢你的快速回答!它现在的效果和预期的一样:)但是,我想知道你是否也可以看看我更新的问题?»避免«这个词太软了,我想;-)谢谢你的快速回答!它现在的效果和预期的一样:)但是,我想知道你是否也可以看看我更新的问题?»避免«这个词太软了,我想;-)