2011-11-16 9 views
9

Desidero richiamare un file batch con un parametro delimitato da virgole. Come posso ottenere questo?Come richiamare un parametro in un file batch con delimitatore di virgola

Mi piace questo esempio.

Ho un text.bat con lo script:

@echo off 
set test=%1 
echo Sample %test% batch. 

Voglio correre il batch come questo:

c:\text.bat this,is,sample 

e mi aspetto un risultato come questo:

Sample this,is,sample batch. 

Qualche idea su come potrei ottenere questo?

Grazie.

+0

grazie per il tuo commento. scusa, sono appena nuovo qui. – quinekxi

risposta

14

Wow! Non sapevo che le virgole si comportassero in quel modo.

Hai due opzioni.

È possibile utilizzare questo script:

@echo off 
set test=%~1 
echo Sample %test% batch. 

ed eseguirlo con:

C:\text.bat "this,is,test" 

Il %~1 rappresenta il primo argomento senza virgolette. Le virgolette raggruppano l'elenco delimitato da virgola come un singolo argomento.

O

È possibile utilizzare questo script:

@echo off 
set test=%* 
echo Sample %test% batch. 

ed eseguirlo con:

C:\text.bat this,is,test 

Il %* rappresenta gli argomenti della riga di comando come sono stati digitati.

+0

grazie amico, ha funzionato! si. le virgole si sono comportate in questo modo. – quinekxi

+0

Ho appena scritto un ciclo per spostare tutti gli argomenti anche oltre% 9 in una singola variabile, ma mi sono bloccato perché un parametro era "a, b" ma "% *" è la soluzione migliore. Grazie. –

8

Nei file batch i delimitatori dei parametri sono, oltre agli spazi, virgola, punto e virgola e segno di uguale, quindi non esiste un modo diretto per farlo. L'unica opzione è racchiudere il parametro tra virgolette: c:\text.bat "this,is,sample" e prendere il parametro con% ~ 1 per eliminare le virgolette: set test=%~1.

+1

grazie amico. la tua risposta è semplice ma spiega tutto. :) – quinekxi

+0

La tua risposta aggiunge qualcosa di prezioso, che è il fatto che virgole, punti e virgola e segni di uguale servono come delimitatori di parametri. (Questo mi spiegava perché 'shift' stava dividendo le stringhe separate da virgola.) L'altra risposta non dice questo. Comunque, tu dici che l'unica opzione che ha il poster originale è usare '% ~ 1'. Questo non è vero; un'altra opzione (citata dall'altra risposta) è usare '% *'. In tal caso, non importa se l'elenco separato da virgole è racchiuso tra virgolette. – Alan

+1

@Alan: se si legge la domanda, l'OP sta parlando di "un parametro", cioè di un parametro * uno *.L'altra risposta richiede l'uso di _all parameters_ così, per esempio, non c'è modo di dare più di un parametro con lo stesso modulo, come in 'c: \ text.bat" questo è, sample "" second, param, con, virgole "'. L'unico modo per farlo è racchiudere _each parameter_ tra virgolette e usare '% ~ 1' e'% ~ 2' ... – Aacini

Problemi correlati