2012-05-09 4 views
0

В настоящее время я пытаюсь написать свой первый пакетный скрипт.Batch Script + Несколько переменных

Что он делает:

  • он получает все файлы из определенной папки и помещает каждый из него в 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" 

) 

Конечно, этот путь, все ярлыки приведет к http://example.com.

Я хотел бы иметь возможность определять уникальный URL для каждого создаваемого ярлыка.

Поскольку я новичок, я не знаю, с чего начать ... и надеялся на предложение!

P.S. Просто чтобы дать вам представление о том, что мне нужно, но это не работает:

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

И чем скрипт должен использовать URL 1 для первого ярлыка, URL 2 для второй и так далее.

Update:

Он отлично работает в настоящее время следующие jeb's ответить ниже. Тем не менее, мне было интересно: возможно ли повторить ту же работу с другой переменной? Так что это выглядит вроде как это:

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

И NewVar должны быть сохранены так же, как:

SET NEWVAR=%2 

Как я мог бы сделать сценарий знать, когда переменные URL сделаны и переменные NewVar начать?

И чем называться как

!NEWVAR! 

ответ

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

+1

+1 Так быстро! Я не знаю, почему я беспокоюсь ... haha ​​ – iesou

+0

Спасибо за быстрый ответ! Он работает как ожидалось сейчас :) Однако мне было интересно, можете ли вы даже взглянуть на мой обновленный вопрос? – Andrej

+0

»избегать« слишком мягкое слово, я думаю ;-) – Joey