bat reenvio de archivos

Iniciado por bela lugosi, 20 Agosto 2013, 08:59 AM

0 Miembros y 1 Visitante están viendo este tema.

bela lugosi

Hola

me gustaría saber si hay alguna forma de hacer un script, para enviar cada archivo que se almacene en una carpeta sin pulsar ningún script.

me explico,  tengo un escaner usb y quiero que cada vez escanee una imagen que me la reenvie automaticamente (sin necesidad de pulsar con el ratón un script) a otra carpeta del pc.


¿existe?

si me podeís ayudar os lo agradecería, un saludo.

Stakewinner00

simplemente tienes que hacer un bucle infinito donde cada x tiempo compruebe si la carpeta esta vacía y si no lo esta que mueva su contenido a la otra carpeta.


Eleкtro

...O bien puedes usar software profesional -> Directory Monitor

Saludos








bela lugosi

#3

Pensé que con un simple .bat sería suficiente, existe alternativa al programa 'Direcotry monitor'.

Tengo un script que renombra los jpg con fecha/hora y mueve de 'unidad scaner usb'  a un directorio de c, pero necesito que se haga automático, no quiero pulsar 'botón script'. Quiero que al escanear la imagen la propia script verifique que hay un archivo jpg -- renombre y mueva a otra carpeta.

Tengo esta parte de código, ahora solo me hace falta que lo haga solo :D
escanear y olvidarse

@echo off

For %%F in (".\*.jpg") Do (
     Call Ren "%%~fF" "%%date:/=-%%, %%time::=.%%.jpg"
     Call :Sleep 5 & REM Milliseconds
move IMG_****.jpg "C:\archivo\"
)


Eleкtro

#4
Arriba ya te han comentado lo que debes hacer, pero además yo te lo he puesto más fácil con Directoy monitor que precísamente esa es su función, monitorizar los cambios en un directorio y ejecutar un script o una acción a realizar.

Te escribo un ejemplo de como hacerlo usando Batch:
Código (dos) [Seleccionar]
@Echo OFF

:Monitor_Loop

If Exist "%TEMP%\FileList.tmp" (

  Dir /B /A-D > "%TEMP%\FileListNew.tmp"
  Echo N | Comp "%TEMP%\FileList.tmp" "%TEMP%\FileListNew.tmp" 2>NUL || (
  Echo Se han encontrado cambios de archivos en el directorio.
  Call :FileOp
  )

MOVE /Y "%TEMP%\FileListNew.tmp" "%TEMP%\FileList.tmp" 1>NUL

) ELSE (
Dir /B /A-D > "%TEMP%\FileList.tmp"
)

Ping -n 5 LOCALHOST 1>NUL
GOTO :Monitor_Loop

:FileOp
For %%# in ("*") Do (Echo "%%~#")
GOTO:EOF


El script comprueba cambios en un directorio, esto significa tanto archivos añadidos como eliminados, si quieres puedes perfeccionarlo usando FOR y/o FORFILES para monitorizar únicamente los nuevos archivos agregados, según la fecha de creación de los archivos.

PD: Óbviamente debes mantener en ejecución el script mientras estés en tu equipo, escaneando.








Stakewinner00

en vez de Ping -n 5 LOCALHOST 1>NUL por que no usar CHOICE /T 5 /C ync /CS /D y

Eleкtro

Básicamente porque le estás dando una funcionalidad incorrecta al comando CHOICE, Choice no sirve para temporizador, si el usuario elige una de las opcioens se detiene el tiempo.

Como ya sabes ping tampoco es un temporizador, pero es la única solucion efectiva en Batch a falta de una verdadera función de "Sleep"...

...A menos que el usuario disponga de Windows 7 u 8 donde aquí podemos usar el comando TIMEOUT y olvidarnos de los otros comandos:

Código (dos) [Seleccionar]
TIMEOUT /T 5

Saludos








Stakewinner00

OK, lo digo por que entre las dos alternativas que no sirven para ello no sabia cual escoger

No sabia lo del timeout.

bela lugosi

@Echo OFF

:Monitor_Loop

If Exist "%TEMP%\FileList.tmp" (

   Dir /B /A-D > "%TEMP%\FileListNew.tmp"
   Echo N | Comp "%TEMP%\FileList.tmp" "%TEMP%\FileListNew.tmp" 2>NUL || (
    Echo Se han encontrado cambios de archivos en el directorio.
    Call :FileOp
    )

MOVE /Y "%TEMP%\FileListNew.tmp" "%TEMP%\FileList.tmp" 1>NUL

) ELSE (
Dir /B /A-D > "%TEMP%\FileList.tmp"
)

Ping -n 5 LOCALHOST 1>NUL
GOTO :Monitor_Loop

:FileOp
For %%# in ("*") Do (Echo "%%~#")

For %%F in (".\*.jpg") Do (
     Call Ren "%%~fF" "%%date:/=-%%, %%time::=.%%.jpg"
     Call :Sleep 5 & REM Milliseconds
move IMG_****.jpg "C:\archivo\"
)

GOTO:EOF





esta bien eso que pongo?

Eleкtro

Cita de: bela lugosi en 21 Agosto 2013, 19:07 PM
esta bien eso que pongo?

Nope, no hay ninguna etiqueta en el código que se llame ":Sleep"

corrige esta línea:
Call :Sleep 5