2016-11-21 4 views
0

сталкиваются некоторые проблемы при попытке печати значений массива, как показано ниже:печати и присвоить массив значения другого переменный в пакетном файле

@echo off 
setlocal EnableDelayedExpansion 
set args= 
set /A argc=0 
SET /A argn=0 
for %%a in (%*) do (
SET args[!argn!]=%%a 
SET /A argn+=1 
) 

FOR %%q in (%*) DO (
echo !args[%argc%]! //not able to print the value 
call echo %%args[!argc!]%% // this worked 

if "%%q" == "--snap" (
     set /A argc+=1 
     set SNAP=!args[%argc%]! //this didn't work 
) 
if "%%q" == "--source" (
     set /A argc+=1 
     call SET "SOURCE=%%args[!argc!]%%" //this didn't work too   
) 
set /A argc+=1 
) 

Используя этот сегмент кода гравюр только первое значение массива, но другой метод использования для/l работает нормально. Как это исправить? Можно ли сохранить это значение массива в любой другой переменной? Если да, то как?

+0

'for %% q in (% *) do ...' сколько параметров выводит ваш командный файл из командной строки ?. BTW 'set/a argc + = 1' является предпочтительным синтаксисом – elzooilogico

+0

13 аргументов из командной строки. @elzooilogico – RRR

+0

и как заполняется массив? Я не понимаю, как он заполнен? – elzooilogico

ответ

0

Вы пытаетесь повторить переменную, которую вы не установили, поэтому она будет пустой.

@Echo Off 
SetLocal EnableDelayedExpansion 
Set argc=0 
For %%q In (%*) Do (
    Set "args[!argc!]=%%q" 
    Rem The next line is for information only 
    Call Echo=%%args[!argc!]%% 
    Set/A argc+=1 
) 
Rem take a look at the variables 
Set args[ 
Timeout -1 
+0

Но как мне присвоить это значение другой переменной? @Compo – RRR

+0

Я не уверен, какое значение или какую переменную вы имеете в виду. Второй параметр уже можно ссылаться с помощью **% 2 ** или **% args [1]% **, поэтому я не понимаю, почему вы хотите снова установить это как другую переменную_. Если я не знаю больше, я не могу советовать. – Compo

+0

Как установить %% args [! Argc!] %% в какую-либо другую переменную? Например, установите snap = %% args [! Args!] %%. Будет ли это работать? – RRR

0

Предполагая delayedexpansion был вызван и argn был установлен на # арг + 1, как сообщается в комментариях,

set /a argn-=1 
for /L %%q in (0,1,%argn%) do echo !args[%%q]! 
set /a argn+=1 

бы мое предпочтение.

Смежные вопросы