2014-04-21 7 views
6

ho un po 'le finestre script batch che non fa altro che stampa tutti i suoi argomenti della riga di comando (proba.bat)Come chiamare uno script di Windows batch con nomi di file con caratteri jolly come argomenti della riga di comando

@echo off 
:loop 
    if "%~1"=="" goto cont 
    echo %1 
    shift & goto loop 
:cont 

Mi aspettavo che questo lo script dovrebbe stampare tutti i file .mp4 se lo chiamo in questo modo:

proba *.mp4 

Ma invece stampa semplicemente * .mp4 letteralmente. Questo sarebbe molto facile su linux, ma qui non riesco a farlo funzionare. Che cosa sto facendo di sbagliato?

si

+2

mia impressione è che prompt di DOS (cmd.exe) non possono fare qualsiasi espansione jolly. Sono alcuni comandi specifici (come copia, dir, move) che fanno da soli questa espansione. È corretto? Sarebbe un peccato. – user3555951

+2

prova 'dir% 1' piuttosto che' echo% 1', usa '/ b' per ottenere una lista vuota se è quello che stai cercando. Altrimenti, guarda il comando 'for'. –

+0

L'argomento della riga di comando è una stringa: '* .mp4', non un elenco di file. – Stephan

risposta

2

Grazie Questo emula quello che si sta cercando di fare:

@echo off 
for %%a in ("%~1") do echo "%%a" 
+0

@ssnobody Per favore aggiungi le tue parole in un commento - Non ho idea di cosa tu stia dicendo qui e il tuo link non menziona affatto '% ~ 1'. Le variabili con una tilda in quel collegamento sono completamente diverse. * ssnobody * * written * "Secondo la documentazione del comando [For] [1] ciò funziona perché all'interno di un ciclo For,% ~ 1" espande "% 1 e risulta in qualcosa di molto simile all'espansione con caratteri jolly tradizionale \t [1 ]: https://technet.microsoft.com/en-us/library/bb490909.aspx " – foxidrive

+1

Non si dice perché funzioni. Solo che lo fa e ho spiegato perché. Se si sostituisce il numero 1 con la lettera I, è possibile vederlo esplicitamente menzionato nel documentario, nella sezione "sostituzione delle variabili" si dice "La seguente tabella elenca la sintassi opzionale (per qualsiasi variabile I)." e specifica che "% ~ I" "Espande% I che rimuove le virgolette circostanti (" ")." – ssnobody

+0

@ssnobody Quindi tutto quello che stai dicendo è che le virgolette sono state rimosse. Sì, la tilda lo fa in '"% ~ 1 "' e il motivo è di gestire nomi di file lunghi e percorsi e anche di gestire i caratteri velenosi per i file batch. Non ha altra funzione nel comando 'for' come si vede sopra. – foxidrive