Как передавать аргументы (не аргументы командной строки) функциям в пакетных сценариях

Я пишу командный файл для автоматизации создания типичных структур папок для продуктов, которые мы продаем. Я хотел бы иметь возможность вызывать свой командный файл с двумя необязательными аргументами; имя поставщика и файл для одновременного создания множества папок. Если поставщик не указан, сценарий через стандартный ввод спрашивает, кто поставщик. Если файл не предоставлен, сценарий запрашивает имя папки, которую вы хотите создать. Если файл передается в качестве аргумента , я бы хотел, чтобы сценарий читал файл построчно и создавал папку для каждой строки, названную в честь содержимого этой строки. Вот функция : readFile :

:readFile
    echo "Reading from file: %theFile%"
    FOR /F "delims=," %%a IN (%theFile%) do (
        call:makeFolder %%a
    )
    goto:EOF

Вот функция : makeFolder , которая необязательно принимает аргумент имени создаваемой папки. Если аргумент не указан, он запрашивает имя через стандартный ввод.

:makeFolder  
    if [%1]==[] (
        set /p product="Enter product name: "
    ) else (
        set product=%1
    )
    if exist "P:\%supplier%\Products\%product%" (
        echo.
        echo The folder '%product%' already exists.
        echo.
        goto:EOF
    )
    mkdir "P:\%supplier%\Products\%product%\Images\Web Ready"
    mkdir "P:\%supplier%\Products\%product%\Images\Supplied"
    mkdir "P:\%supplier%\Products\%product%\Images\Edited"
    goto:EOF

Моя проблема в том, что в : makeFolder функция % 1 ссылается на 1-й аргумент, указанный в командной строке, а не на тот, который указан в : readFile функция. Как я могу этого добиться? Предостережение: я очень новичок в пакетном сценарии, поэтому вам, возможно, придется говорить со мной, как будто я немного глуп.

7
задан punkrockbuddyholly 24 October 2011 в 14:49
поделиться