Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Foro referente al sistema operativo Windows y que no se puede clasificar en los foros anteriores
zelarra821
Usuario linuxero
Usuario linuxero
Mensajes: 3
Registrado: 15 Feb 2025, 16:02

Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por zelarra821 »

Hola.

Soy nuevo en este foro. Quería pedir ayuda para un archivo bat que tengo pero que no consigo que funcione.

Código: Seleccionar todo


@echo off

setlocal enabledelayedexpansion

set "FOLDER="%D:\Bandeja de entrada\000 M¢vil""

set "IGNORE_EXT=.sh"

echo.
dir !FOLDER!

for /f %%n in ('dir /b /a-d ^| findstr /v /i "!IGNORE_EXT!" ^| find /c /v ""') do (
    set COUNT=%%n
    if !COUNT! equ 0 (
        echo.
        echo No se han encontrado archivos.
	@pause
        exit /b
    )
)

echo.

SET choice=

SET /p choice=¨Quieres mover los archivos? [S/N]: 

IF NOT '%choice%'=='' SET choice=%choice:~0,1%

IF '%choice%'=='S' GOTO Sí
IF '%choice%'=='s' GOTO Sí

IF '%choice%'=='N' GOTO No
IF '%choice%'=='n' GOTO No
IF '%choice%'=='' GOTO No

ECHO "%choice%" introducido incorrecto. Prueba de nuevo.

ECHO.

GOTO start

:Sí

move /y "D:\Bandeja de entrada\000 M¢vil\Audios\*.*" "D:\Bandeja de entrada\Audios"

move /y "D:\Bandeja de entrada\000 M¢vil\Documentos\*.*" "D:\Bandeja de entrada\Documentos"

move /y "D:\Bandeja de entrada\000 M¢vil\Im genes\*.*" "D:\Bandeja de entrada\Im genes"

move /y "D:\Bandeja de entrada\000 M¢vil\V¡deos\*.*" "D:\Bandeja de entrada\V¡deos"

move /y "D:\Bandeja de entrada\000 M¢vil\ZZZ Comprobar\*.*" "D:\Bandeja de entrada\ZZZ Comprobar"

:No

EXIT

ECHO Se han movido los archivos correctamente.

@pause

endlocal

Este es el código que tengo en dicho archivo. El problema lo tengo con las siguientes siguientes líneas:

Código: Seleccionar todo


set "FOLDER="%D:\Bandeja de entrada\000 M¢vil""

set "IGNORE_EXT=.sh"

for /f %%n in ('dir /b /a-d ^| findstr /v /i "!IGNORE_EXT!" ^| find /c /v ""') do (

He probado esta opción, con vistas a que pudiera más adelante querer añadir más extensiones y/o archivos concretos, pero es que no hay manera de que funcione correctamente:

Código: Seleccionar todo


set "FOLDER=D:\Bandeja de entrada\000 Móvil"

for /f %%n in ('dir /b /a-d ^| findstr /v /i "Delete.sh Budget\ 2024.xlsm \.sh$ \.bat$" ^| find /c /v ""') do (
	
Por eso, me gustaría saber si hay alguien que pudiera ayudarme con este problema.

Muchas gracias.

Avatar de Usuario
pako
Usuario Bill Gates
Usuario Bill Gates
Mensajes: 2173
Registrado: 08 Jun 2018, 19:40

Re: Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por pako »

Hola,

Partiendo que no entiendo de scripts .bat

Porque no lo haces por partes y lo vas pintando en la pantalla, hasta dar con el error?

Me refiero a:

Código: Seleccionar todo

 for /R c:\windows %v in (*.dll, *.exe) do (
   echo %v
)
Que funciona, lo siguiente seteas la ruta en una variable y vuelves a probar, vas añadiendo poco a poco hasta dar con el fallo.

En el for estas usando tres condiciones (OR), pon solo una y te aseguras que funciona, luego la segunda y así.

Creo que tú que si que entiendes este lenguaje de programación, te ayudarian las explicaciones y ejemplos de esta web:

[Enlace externo eliminado para invitados]

Saludos
Si has encontrado aquí la ayuda que esperabas (o incluso si no ha sido así ;) ), ayúdanos a mantener el foro con un pequeño donativo.
¡Muchas gracias!

zelarra821
Usuario linuxero
Usuario linuxero
Mensajes: 3
Registrado: 15 Feb 2025, 16:02

Re: Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por zelarra821 »

Hola, disculpad lo primero que haya tardado tanto en responder: he tenido una semana complicada y no he podido sentarme a contestar hasta ahora.

A ver, os cuento.

El archivo bat que tengo ahora mismo me funciona perfectamente. Sin embargo, sí que me gustaría mejorarlo para que si yo quiero excluir ciertos archivos y extensiones de archivos, poder modificarlo sin tener que pedir ayuda de nuevo.

¿Cuáles son las líneas "que me dan problemas? Estas:

Código: Seleccionar todo


set "FOLDER=D:\Bandeja de entrada\000 Móvil"""

echo.
dir !FOLDER!

for /f %%n in ('dir /b /a-d ^| findstr /v /i "Delete.sh Budget\ 2024.xlsm \.sh$ \.bat$" ^| find /c /v ""') do (

Y más concretamente en la parte de "Delete.sh Budget\ 2024.xlsm \.sh$ \.bat$", porque no me reconoce ninguno.

NOTA: ya sé que falta completar el do. He aislado las líneas importantes nada más.´

Muchas gracias.

Avatar de Usuario
pako
Usuario Bill Gates
Usuario Bill Gates
Mensajes: 2173
Registrado: 08 Jun 2018, 19:40

Re: Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por pako »

Hola,

Por lo que vi en un ejemplo usan findstr /v "\\@"

El /v es para que imprimir líneas que no contienen la coincidencia y la otra parte para archivos que no comiencen por @

Para eliminar archivos con ciertas extensiones en un ejemplo del link que te puse:

for %f in (*.jpg, *.mp3, *.bmp) do (
move %f c:\recycler
)

Lo separan por comas cada extensión y no lleva comillas.

Saludos
Si has encontrado aquí la ayuda que esperabas (o incluso si no ha sido así ;) ), ayúdanos a mantener el foro con un pequeño donativo.
¡Muchas gracias!

Avatar de Usuario
pako
Usuario Bill Gates
Usuario Bill Gates
Mensajes: 2173
Registrado: 08 Jun 2018, 19:40

Re: Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por pako »

Hola,

No sé como meterlo dentro del for, puedes poner dentro del for un condicional "if" con un "else", donde excluyes lo que no quieres.

Y mejor aun, que niegues la condición, en la mayoría de lenguajes se usa "!" poniéndolo delante para que niegue la expresión.

Por ejemplo, en php se usa para ver si una variable está vacía:

Código: Seleccionar todo

if(empty($variable))
Para negarlo y comprobar si está llena:

Código: Seleccionar todo

if(!empty($_GET)){
En Batch por lo que vi creo es así:

Código: Seleccionar todo

if [ ! -d "Directorio" ]; then
Consulta la documentación de como negar una expresión en Batch y en vez de negarlo en el if, mira si te deja negarlo directamente dentro del for.

Saludos
Si has encontrado aquí la ayuda que esperabas (o incluso si no ha sido así ;) ), ayúdanos a mantener el foro con un pequeño donativo.
¡Muchas gracias!

zelarra821
Usuario linuxero
Usuario linuxero
Mensajes: 3
Registrado: 15 Feb 2025, 16:02

Re: Archivo bat para contar si hay archivos y luego moverlos a otra carpeta

Mensaje por zelarra821 »

Muchas gracias.