windows - txt - pasar a un texto todos los nombres de archivos de una carpeta




Iterar todos los archivos en un directorio usando un bucle 'for' (10)

% 1 se refiere al primer argumento pasado y no se puede usar en un iterador.

Prueba esto:

@echo off
for %%i in (*.*) do echo %%i

¿Cómo puedo iterar sobre cada archivo en un directorio usando un bucle for ?

¿Y cómo podría saber si una determinada entrada es un directorio o si es solo un archivo?


El siguiente código crea un archivo llamado "AllFilesInCurrentDirectorylist.txt" en el directorio actual, que contiene la lista de todos los archivos (solo archivos) en el directorio actual. Echale un vistazo

dir /b /a-d > AllFilesInCurrentDirectorylist.txt

En mi caso tuve que borrar todos los archivos y carpetas debajo de una carpeta temporal. Así es como terminé haciéndolo. Tuve que ejecutar dos bucles, uno para archivo y otro para carpetas. Si los archivos o carpetas tienen espacios en sus nombres, entonces tiene que usar ""

cd %USERPROFILE%\AppData\Local\Temp\
rem files only
for /r %%a in (*) do (
echo deleting file "%%a" ...
if exist "%%a" del /s /q "%%a"
)
rem folders only
for /D %%a in (*) do (
echo deleting folder "%%a" ...
if exist "%%a" rmdir /s /q "%%a"
)

Este for-loop listará todos los archivos en un directorio.

pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd

"delims =" es útil para mostrar nombres de archivo largos con espacios en él ....

'/ b "muestra solo nombres, no fechas de tamaño, etc.

Algunas cosas para saber sobre el argumento de dir / a.

  • Cualquier uso de "/ a" listaría todo, incluidos los atributos ocultos y del sistema.
  • "/ ad" solo mostraría subdirectorios, incluidos los ocultos y los del sistema.
  • El argumento "/ ad" elimina el contenido con el atributo 'D'irectory.
  • "/ adhs" mostrará todo, pero las entradas con el atributo 'D'irectory,' H'idden 'S'ystem.

Si usa esto en la línea de comandos, elimine un "%".

Espero que esto ayude.


Hay una diferencia sutil entre ejecutar FOR desde la línea de comandos y desde un archivo por lotes. En un archivo por lotes, debe colocar dos caracteres de % delante de cada referencia de variable.

Desde una línea de comando:

FOR %i IN (*) DO ECHO %i

De un archivo por lotes:

FOR %%i IN (*) DO ECHO %%i

Intenta esto para probar si un archivo es un directorio:

FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory

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 lo necesita. Las caretas (^) se utilizan 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 DIR se redirige a la salida para que pueda probar el mensaje de DIR "Archivo no encontrado ".


También podría usar el comando forfiles :

forfiles /s 

y también comprobar si es un directorio

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

Utilizo 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, podría hacer algo como esto:

for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a

Solo uso c: \ como destino porque siempre existe en los sistemas Windows y no se está copiando, por lo que no importa. Si desea que los subdirectorios también use la opción / s al final. También puede usar los otros conmutadores de xcopy si los necesita por otras razones.


prueba esto:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

cuenta los archivos .msi y .exe en su directorio (y en el subdirectorio). Así que también hace la diferencia entre carpetas y archivos como ejecutables.

Solo agregue una extensión (.pptx .docx ..) si necesita filtrar otros archivos en el bucle


Para iterar sobre cada archivo funcionará un bucle for:

for %%f in (directory\path\*) do ( something_here )

En mi caso también quería el contenido del archivo, nombre, etc.

Esto me llevó a algunos problemas y pensé que mi caso de uso podría ayudar. Aquí hay un bucle que lee la información de cada archivo '.txt' en un directorio y le permite hacer algo con él (por ejemplo, setx).

@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
  set /p val=<%%f
  echo "fullname: %%f"
  echo "name: %%~nf"
  echo "contents: !val!"
)

* Limitación: val <= %% f solo obtendrá la primera línea del archivo.





cmd