2009-09-19 5 views
9

Sto provando a fare alcune cose durante la fase di pre-costruzione di un progetto di studio visivo. Nello specifico, sto cercando di eseguire alcuni comandi su tutti i file * .resx all'interno del progetto. Ecco cosa ho ma non funziona quando il percorso dei file/directory ha uno spazio al loro interno. Come posso aggirare questi spazi?Cerca i file in uno script batch ed elabora questi file?

for /f %%a in ('dir /B /S *.resx') do echo "%%a" 
+0

Possibile duplicato di [Iterazione tutti i file in una directory con un 'in' loop] (https://stackoverflow.com/ domande/138497/iterate-all-files-in-a-directory-using-a-for-loop) –

risposta

14

Voi sapete che for può anche funzionare in modo ricorsivo su directory?

for /r %%x in (*.resx) do echo "%%x" 

Molto più facile che giocherellare con delimitatori e consente di risparmiare da corsa dir.

+0

Questa sembra la soluzione più pulita. Sapevo che doveva esserci un trucco. Sono così abituato a * nix scripting dove le cose sono molto più facili. Grazie a tutti per le informazioni. – bsh152s

+0

Beh, non è molto più complicato di find/xargs, imho. – Joey

2

È possibile utilizzare findutils per Windows - si comprende sia "trovare" e "xargs"

2

Si potrebbe anche installare Cygwin per ottenere una shell Unix-esque in piena regola, che viene fornito con il vecchio fidato comando "trova", più una serie di altri strumenti. Ad esempio,

find . -name "*.resx" | xargs grep MyProjectName 
+0

E fai in modo che tutta la tua costruzione dipenda dall'esistenza di cygwin. Non molto bello. Per non parlare del fatto che è molto inutile per questo compito. – Joey

4

Stick con il testo per il parser del guscio

for /f "delims=|" %%a in ('dir /B /S *.resx') do echo "%%a" 

sufficiente aggiungere un'opzione delims (per un carattere delim che ovviamente non potrebbe esistere), et voilà!

Nell'assenza di questa opzione delimita,/f farà ciò che si suppone, cioè analizza l'input suddividendolo in ogni spazio o sequenza di tabulazioni.

2

Si sta eseguendo inavvertitamente l'uso del delimitatore di spazio predefinito. È possibile risolvere che reimpostando le delims in questo modo:

for /f "delims=" %%a in ('dir /B /S *.resx') do echo "%%a" 
1

Per generare un semplice elenco di file di tutti i file rilevanti per la successiva elaborazione

@echo create a results file… 
if exist results.txt (del results.txt) 
echo. >NUL 2>results.txt 

@echo minimal recursive subdirectory search for filespec... 
dir /s /a /b "*.resx" >>results.txt