Pregunta

Este es uno de esos requisitos que parecen complicarse más, cada vez que me encuentro con una cáscara de corte / cmd de Windows que necesitan un 'evitar'. Esencialmente ... necesito iterar a través de una lista específica de las carpetas en un shell de DOS para el lazo. Aquí es el bucle que se me ocurrió:

 echo  ^ [start for test]
 for  /F "usebackq "  %%f IN (`dir /b /adh "w:\sandbox\tmp\"`)  DO (
    echo ^    do with file: %%f
    rem  <do something>
 )
echo  ^ [for test done]

La necesidad principal es iterar a través de los directorios ocultos en la carpeta de origen (caja de arena \ tmp aquí).

El resultado es sorprendente y frustrante. Este es el resultado del uso de esta instrucción FOR en la línea de comandos de la consola.

W:..> for  /F "usebackq "  %f 
              IN (`dir /b /adh "w:\sandbox\tmp\"`)  DO echo ^ folder = %f
File Not Found                                <1>
  folder = C:\WINDOWS\system32\cmd.exe        <2>
  folder = any                                <4>
  folder = hidden-folder-01                   <3>
  folder = hidden-folder-02                   <3>
  folder = morph                              <4>
  folder = practice-northwind                 <4>

que enumera cinco carpetas. ¡Excelente! Y uno cmd.exe en la etiqueta: << strong> 2 > y un misterio en la etiqueta: << strong> 1 >. Debería explicar los DIR interruptores, creo.

  • / b ....... nombres formato desnudo, solo archivo / carpeta.
  • / a dh ..... Tanto ocultos y directorios, que trataron de manera exhaustiva - no funcionaba.
    / a HD
  • / a d ...... Los elementos con el atributo de Directorio (carpetas).
  • / a h ...... archivos ocultos / carpeta (aparentemente).

He marcado la salida y esto es lo que he trabajado hasta ahora.

  1. 'archivo no encontrado' .. .. .. .. .. .. .. no tengo ni idea. Me parece que el "archivo no encontrado". << strong> 1 > es un artefacto de la fuerte <> / interruptor ah. Cuando acabo de decir:
    (dir /b /adh "w:\sandbox\tmp\")
  2. C: \ WINDOWS \ system32 ** ** cmd.exe .. .. iterador espurias ( %% f ); Este error sólo se muestra con F versión / comando. Quiero encontrar directorios ocultos, y la lista de archivos set no devuelve los archivos ocultos (d'oh). Por lo tanto, hasta ahora tengo que cargar con el usebackq de A / F .
  3. Las carpetas ocultos ... .. .. .. .. .. .. Estas carpetas son los esperada salida _.
  4. Las carpetas de directorio. .. .. .. .. .. .. Estos archivos son falsos resultados, y no quería.

El resultado previsto de la versión de la línea CMD (o de la muestra de la escritura DOS) es sólo el << strong> 3 > artículos.

W:..> for  /F "usebackq "  %f 
              IN (`dir /b /adh "w:\sandbox\tmp\"`)  DO echo ^ folder = %f
  folder = hidden-folder-01                   <3>
  folder = hidden-folder-02                   <3>

Por desgracia, "puede también conseguir casi cualquier archivo en la carpeta de destino. Creo que es más que ver con el interruptor oculto (/ AH).

¿Cómo puedo obtener una lista sólo las carpetas ocultos (archivos) en un directorio conjunto; y iterar sobre la lista como el comando FOR?

Gracias de antemano / Will

¿Fue útil?

Solución

Debe utilizar

for  /F "usebackq delims=*"  %f IN (`"dir /b /adh "%1" 2>NUL"`)  DO @echo. folder = "%f"

para hacerlo.

2>NUL

se asegurará de que el canal de error (por ejemplo. Archivo no encontrado) no se muestra y se refirió a NULL (NUL)

delims=*

se asegurará de que el guión también funcionará si los nombres de archivo tienen espacios, ya que los nombres de archivo no pueden tener un "*" en la que les vamos a encontrar todos!

Espero que esto funcione para usted, funcionó para mi.

Me gustaría tener una retroalimentación si algo cambia a su lado, si no se utiliza% f%, pero utiliza una, tengo una idea de por qué sale el siguiente que está en su línea de salida

folder = C:\WINDOWS\system32\cmd.exe        <2>

saluda PCFreak

Otros consejos

En el archivo por lotes dir /b /a dh "w:\sandbox\tmp\" debe dir /b /adh "w:\sandbox\tmp\" sin espacio entre / a y DH. Con el espacio del comando dir es la interpretación de DH como un directorio o un archivo paremer y es la causa de su archivo no se encuentra el error.

Cuando se ejecuta desde la línea de comandos que está utilizando un parámetro diferente a la dir /b /ah /ad "w:\sandbox\tmp\" comando dir por lo que está recibiendo de salida diferente. Con / ah y / ad como parámetros separados dir parece interpretar que debería mostrar cosas que son directorios o archivos ocultos, mientras que / ADH mostrar lo que son ambos directorios y oculto.

También usted no necesita tener @ en todas sus líneas. Justo pero @echo off en la parte superior del archivo y que va a desactivar el comando de eco para todo el archivo por lotes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top