Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本+;多变量_Windows_Batch File - Fatal编程技术网

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快捷方式

到目前为止,一切正常,但问题是:我想用唯一的URL创建快捷方式。现在,我只是通过如下脚本传递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!

谢谢你的快速回答!它现在的效果和预期的一样:)但是,我想知道你是否也可以看看我更新的问题?»避免«这个词太软了,我想;-)谢谢你的快速回答!它现在的效果和预期的一样:)但是,我想知道你是否也可以看看我更新的问题?»避免«这个词太软了,我想;-)