¿Cómo puedo iterar sobre cada archivo en un directorio usando un for
bucle?
¿Y cómo podría saber si cierta entrada es un directorio o si es solo un archivo?
windows
batch-file
for-loop
cmd
Vhaerun
fuente
fuente
Respuestas:
Esto enumera todos los archivos (y solo los archivos) en el directorio actual:
Además, si ejecuta ese comando en un archivo por lotes, debe duplicar los signos de%.
(gracias @agnul)
fuente
for /r %i in (*) do ( echo %~nxi )
. Este hilo también puede ser realmente útil: stackoverflow.com/questions/112055/… .Iterar a través de ...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
Desafortunadamente, no encontré ninguna forma de iterar sobre archivos y subdirecciones al mismo tiempo.
Simplemente use cygwin con su bash para mucha más funcionalidad.
Aparte de esto: ¿Notó que la ayuda de compilación de MS Windows es un gran recurso para las descripciones de la sintaxis de la línea de comandos de cmd?
También eche un vistazo aquí: http://technet.microsoft.com/en-us/library/bb490890.aspx
fuente
%file
y%subdir
sólo puede ser un carácter de longitud, es decir%f
,%s
.Para iterar sobre cada archivo, un bucle for funcionará:
for %%f in (directory\path\*) do ( something_here )
En mi caso, también quería el contenido del archivo, el nombre, etc.
Esto condujo a algunos problemas y pensé que mi caso de uso podría ayudar. Aquí hay un bucle que lee información de cada archivo '.txt' en un directorio y le permite hacer algo con él (por ejemplo, setx).
* Limitación: val <= %% f solo obtendrá la primera línea del archivo.
fuente
Existe una sutil diferencia entre ejecutar
FOR
desde la línea de comandos y desde un archivo por lotes. En un archivo por lotes, debe poner dos%
caracteres delante de cada referencia de variable.Desde una línea de comando:
De un archivo por lotes:
fuente
Este bucle for mostrará una lista de todos los archivos en un directorio.
"delims =" es útil para mostrar nombres de archivo largos con espacios ...
'/ b "muestra solo nombres, no fechas de tamaño, etc.
Algunas cosas que debes saber sobre el argumento de dir / a.
Si usa esto en la línea de comandos, elimine un "%".
Espero que esto ayude.
fuente
% 1 se refiere al primer argumento pasado y no se puede usar en un iterador.
Prueba esto:
fuente
Pruebe "AYUDA PARA" en cmd para obtener una guía completa
Esta es la guía para los comandos XP. http://www.ss64.com/nt/
fuente
Para recorrer todos los archivos y carpetas , puede usar
Para iterar a través de todas las carpetas solo no con archivos, entonces puede usar
Donde
/s
dará todos los resultados en todo el árbol de directorios en profundidad ilimitada. Puede omitir/s
si desea recorrer el contenido de esa carpeta, no su subcarpetaImplementando búsqueda en iteración
Para iterar a través de un determinado archivo con nombre y carpetas , puede buscar el nombre e iterar usando el bucle
Para iterar a través de carpetas / directorios con nombre en particular y no archivos , luego use
/AD
el mismo comandofuente
Tuve problemas para obtener la respuesta de jop para trabajar con una ruta absoluta hasta que encontré esta referencia: https://ss64.com/nt/for_r.html
El siguiente ejemplo recorre todos los archivos en un directorio dado por la ruta absoluta.
fuente
El siguiente código crea un archivo denominado "AllFilesInCurrentDirectorylist.txt" en el directorio actual, que contiene la lista de todos los archivos (solo archivos) en el directorio actual. Echale un vistazo
fuente
También podría usar el comando forfiles :
y también verifique si es un directorio
fuente
@isdir==true
necesita ser@isdir==TRUE
Usaría vbscript (Windows Scripting Host), porque en lote estoy seguro de que no puedes decir que un nombre es un archivo o un directorio.
En vbs, puede ser algo como esto:
Verifique FileSystemObject en MSDN .
fuente
Uso el comando xcopy con la opción / L para obtener los nombres de los archivos. Entonces, si desea obtener un directorio o todos los archivos en el subdirectorio, puede hacer algo como esto:
Solo uso c: \ como destino porque siempre existe en los sistemas Windows y no se está copiando, por lo que no importa. si quieres los subdirectorios también usa la opción / s al final. También puede usar los otros interruptores de xcopy si los necesita por otros motivos.
fuente
Pruebe esto para probar si un archivo es un directorio:
Esto solo le dirá si un archivo NO es un directorio, lo que también será cierto si el archivo no existe, así que asegúrese de verificarlo primero si es necesario. Las marcas (^) se usan para escapar de los símbolos de redireccionamiento y la salida de la lista de archivos se redirige a NUL para evitar que se muestre, mientras que la salida de error de la lista de DIR se redirige a la salida para que pueda probar el mensaje "Archivo no encontrado" de DIR ".
fuente
prueba esto:
cuenta archivos .msi y .exe en su directorio (y en el subdirectorio). Por lo tanto, también hace la diferencia entre carpetas y archivos como ejecutables.
Simplemente agregue una extensión (.pptx .docx ..) si necesita filtrar otros archivos en el bucle
fuente
En mi caso, tuve que eliminar todos los archivos y carpetas debajo de una carpeta temporal. Así es como terminé haciéndolo. Tuve que ejecutar dos bucles, uno para el archivo y otro para las carpetas. Si los archivos o carpetas tienen espacios en sus nombres, entonces debe usar ""
fuente
Aquí está mi ir con comentarios en el código.
Solo estoy repasando las habilidades de biatch, así que perdona cualquier error evidente.
Traté de escribir una solución todo en uno lo mejor que pude con una pequeña modificación donde el usuario lo requiere.
Algunas notas importantes: simplemente cambie la variable
recursive
aFALSE
si solo desea que se procesen los archivos y carpetas de los directorios raíz. De lo contrario, pasa por todas las carpetas y archivos.C&C muy bienvenido ...
fuente