2010-12-07 8 views
7

Actualmente estoy tratando de escribir un script .cmd Windows Shell que iteraría sobre un conjunto de carpetas. Sin embargo, incluso la siguiente secuencia de comandos simple:¿Cómo puedo iterar sobre un conjunto de carpetas en Windows Shell?

echo "%ROOT%" 
for %%f in ("%ROOT%\Binaries\") do (
    echo "%%f" 
    if not exist "%%f\Subfolder" 
     md "%%f\Subfolder" 
) 

salidas:

CurrentDir>echo "<ActualPathToRoot>" 
"<ActualPathToRoot>" 
%f\Subfolder was unexpected at this time 
CurrentDir>if exists "%f\Subfolder" 

¿Qué estoy haciendo mal? ¿Cómo modifico ese script para que itere sobre esa única carpeta y una vez que ve que no hay una subcarpeta llamada "Subcarpeta" crea esa subcarpeta? También hay un buen tutorial sobre cómo escribir tales scripts?

Respuesta

4

Esto funciona para mí:

echo %ROOT% 
for /D %%f in (%ROOT%\Binaries\*) do echo %%f && if not exist %%f\Subfolder md %%f\Subfolder 
+0

¿Debería estar todo en una sola línea? – sharptooth

+0

Sí. Al menos en mi versión funcionó así. Tal vez hay una manera ahora de hacerlo en múltiples líneas, pero los archivos clásicos por lotes funcionan así. Y generalmente la gente usaría 'goto' para tener muchas líneas. – detunized

+0

Muchas gracias. El problema era que no esperaba que los saltos de línea importasen. – sharptooth

8

para (sub) carpeta de iteración es necesario utilizar un for parámetro diferente.

Así que si quieres lista de todos los directorios C: usted debe hacer esto:

for /d %%A in (C:\*) do echo %%A 

Nota /d el parámetro que indica un directorio. Para ir en subdirectorios que tiene que hacer un recursivo para con /r

for /r C:\Windows %%A in (*.jpg) do echo %%A 

Esto iterar a través de todos los subdirectorios de Windows en busca de archivos JPG. Bajo he aquí que deberías poder hacer /d /r y this reference suggests puedes - Simplemente no puedo, ¿pero quizás puedas hacer esto?

Una solución rápida Anoté es simplemente hacer un dir de todos los directorios en un bucle for:

for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A 

Tenga en cuenta que dir se utiliza en conjunción con /ad/s/b que lleva a cabo una lista recursiva de directorios, la impresión de la nombres de los directorios encontrados.
Con estas herramientas en su mano, debería poder hacer su construcción de subcarpetas if. Tenga en cuenta que puede necesitar

Cuestiones relacionadas