[OT] archivo por lotes

06/06/2004 - 22:40 por Packo | Informe spam
Estoy haciendo un archivo por lotes que lea entradas de un fichero de texto
y lo tengo más o menos terminado. El tema es que necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de solicitar datos por
teclado al usuario o me lo tengo que currar en C o similar?

Salu2
Packo

Preguntas similare

Leer las respuestas

#6 JM Tella Llop [MVP Windows]
07/06/2004 - 15:34 | Informe spam
Anda... prueba esto -QUE FUNCIONA-: (y cuidado, usa cortar y pegar para que no tome retornos de linea)

@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destinofor /f "skip=%ld% tokens=* delims=" %%i in (cert.ini) do if "%origen%." == "." set destino=%%i
for /f "skip=%lo% tokens=* delims=" %%i in (cert.ini) do set nz=%%i&if "!nz:~,1!" == "[" (goto :eof) ELSE if "!nz:~,1!" == "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
echo haz lo que quieras con %1 y %2


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




"Packo" wrote in message news:1916401c44c8b$ec47f380$
amos a ver, pq creo q me estoy liando :(

tengo un cert.bat con el siguiente contenido:

set cont=1
echo contador=%cont%
rem set /p ruta="ESCRIBE LA RUTA:"
rem echo %ruta%

:ORIGEN

for /f "tokens=* delims=" %%i in (cert.ini) do if "%%i"
== "[ORIGEN]" (
for /f "tokens=* delims=" %%i in (cert.ini) do
set /A cont=%cont%+1 & set origen= %%i)

echo origen=%origen% & echo contador=%cont%)

goto :DESTINO


:DESTINO

rem for /f "tokens=* delims=" %%i in (cert.ini) do if "%%
i" == "[DESTINO]" (
rem for /f "tokens=* delims=" %%i in (cert.ini) do set
destino=%%i)
rem echo %destino%




goto :EOF

:EOF


y un cert.ini con el siguiente

[ORIGEN]
\\10.40.1.75\pruebas
\\10.40.1.75\pruebas2




[DESTINO]
\\10.40.1.75\destino




El problema que tengo a falta de seguir dandole vueltas es
que me guarde las entradas que cuelgan de ORIGEN en
variables independientes. Alguna sugerencia?

SAlu2
Packo

Eso es (bueno, mas o menos :-$) lo que habia pensado.
es q esto de estar pensando el domingo en el curro no es


bueno :(

La idea es coger de una serie de maquinas (las rutas que


están debajo de la
etiqueta [ORIGEN]) los archivos que estan en ellas y


dejarlos en la ruta que
está en la etiqueta [DESTINO] renombrandolo a


NombreDeMaquina.AAAA.MM.DD (el
nombre original es AAAAMMDD)

Lo del renombrar creo que lo tengo solucionado con la


veriable
%computername% o bien cogiendo el nombre de la linea


del 'ini'

Salu2
Packo

"JM Tella Llop [MVP Windows]"


escribió en el mensaje
news:
for /f "tokens=* delims=" %i in (fichero.txt) do if "%i"


== "[DESTINO] goto
:EOF

es que no te entiendo muy bien si me dices completo


que quieres
hacer.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
joder, no se me habia ocurrido. Muchas gracias Jose




Manuel

Ya que estamos... ;) Lo que tengo que hacer es que el




bat coja de un
fichero
de texto una ruta de un servidor que es donde va a




depositar una serie de
archivos y del mismo fichero (a las malas lo haré con 2




ficheros, uno
origen
y otro destino, que así ya lo tengo) una serie de rutas




donde estan los
archivos de origen, sabes si hay alguna manera de




tratar etiquetas o
similar?.

La idea es algo así como:

fichero.txt

[ORIGEN]
\\maquina1ecurso\compartido
\\maquina2ecurso\compartido
\\maquina3ecurso\compartido
\\maquina4ecurso\compartido
\\maquina5ecurso\compartido
\\maquina6ecurso\compartido
\\maquina7ecurso\compartido
\\maquina8ecurso\compartido

[DESTINO]
\\servidorecurso\compartido

y que en el bat en el for que voy a usar para leer los




origenes, se pare
cuando llegue a la etiqueta siguiente (ahora que lo




pienso creo que se me
está ocurriendo una manera, pero no se si va a




funcionar, mañana lo
pruebo)

Salu2
Packo

"JM Tella Llop [MVP Windows]"




escribió en el mensaje
news:%
set /p variable="texto de la pregunta"

esto muestra el "texto de la pregunta" y espera una




respuesta que meterá
en
"variable".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías




de ninguna clase, y
no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties,




and confers no
rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
Estoy haciendo un archivo por lotes que lea entradas






de un fichero de
texto
y lo tengo más o menos terminado. El tema es que






necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en






funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de






solicitar datos por
teclado al usuario o me lo tengo que currar en C o






similar?

Salu2
Packo










.

Respuesta Responder a este mensaje
#7 Anonimo
08/06/2004 - 13:25 | Informe spam
Muchas gracias Jose Manuel. (ya no encontraba el post,
está ya en la pagina 8 :O)

Una vez abusando xDDDD

Llevo toda la mañana pensando como hacerlo y no soy capaz
de hacerlo.

La idea es cojer el nombre de las maquinas origen y
anteponerselo al nombre de los ficheros que tienen dichas
maquinas. Me explico:

[ORIGEN]
\\maquina1ecurso
\\maquina2ecurso
\\IP3ecurso

[DESTINO]
\\maquina3\destino

Dentro de los origenes hay archivos con el formato
AAAAMMDD.txt y como el destino es común a los origenes,
tengo que añadirle el nombre de la maquina o la IP (lo que
aparezca en la ruta), de tal manera que en el destino el
archivo se llame maquina1.2004.06.05.txt (mientras que en
origen se llama 20040605.txt).

Se te ocurre alguna forma facilita de hacerlo?

Salu2
Packo

Anda... prueba esto -QUE FUNCIONA-: (y cuidado, usa


cortar y pegar para que no tome retornos de linea)

@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destino>for /f "skip=%ld% tokens=* delims=" %%i in (cert.ini) do


if "%origen%." == "." set destino=%%i
for /f "skip=%lo% tokens=* delims=" %%i in (cert.ini) do


set nz=%%i&if "!nz:~,1!" == "[" (goto :eof) ELSE if "!
nz:~,1!" == "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
echo haz lo que quieras con %1 y %2


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" wrote in message


news:1916401c44c8b$ec47f380$
amos a ver, pq creo q me estoy liando :(

tengo un cert.bat con el siguiente contenido:

set cont=1
echo contador=%cont%
rem set /p ruta="ESCRIBE LA RUTA:"
rem echo %ruta%

:ORIGEN

for /f "tokens=* delims=" %%i in (cert.ini) do if "%%i"
== "[ORIGEN]" (
for /f "tokens=* delims=" %%i in (cert.ini) do
set /A cont=%cont%+1 & set origen= %%i)

echo origen=%origen% & echo contador=%cont%)

goto :DESTINO


:DESTINO

rem for /f "tokens=* delims=" %%i in (cert.ini) do if "%%
i" == "[DESTINO]" (
rem for /f "tokens=* delims=" %%i in (cert.ini) do set
destino=%%i)
rem echo %destino%




goto :EOF

:EOF


y un cert.ini con el siguiente

[ORIGEN]
\\10.40.1.75\pruebas
\\10.40.1.75\pruebas2




[DESTINO]
\\10.40.1.75\destino




El problema que tengo a falta de seguir dandole vueltas


es
que me guarde las entradas que cuelgan de ORIGEN en
variables independientes. Alguna sugerencia?

SAlu2
Packo

Eso es (bueno, mas o menos :-$) lo que habia pensado.
es q esto de estar pensando el domingo en el curro no es


bueno :(

La idea es coger de una serie de maquinas (las rutas que


están debajo de la
etiqueta [ORIGEN]) los archivos que estan en ellas y


dejarlos en la ruta que
está en la etiqueta [DESTINO] renombrandolo a


NombreDeMaquina.AAAA.MM.DD (el
nombre original es AAAAMMDD)

Lo del renombrar creo que lo tengo solucionado con la


veriable
%computername% o bien cogiendo el nombre de la linea


del 'ini'

Salu2
Packo

"JM Tella Llop [MVP Windows]"


escribió en el mensaje
news:
for /f "tokens=* delims=" %i in (fichero.txt) do if "%i"


== "[DESTINO] goto
:EOF

es que no te entiendo muy bien si me dices completo


que quieres
hacer.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
joder, no se me habia ocurrido. Muchas gracias Jose




Manuel

Ya que estamos... ;) Lo que tengo que hacer es que el




bat coja de un
fichero
de texto una ruta de un servidor que es donde va a




depositar una serie de
archivos y del mismo fichero (a las malas lo haré con






2
ficheros, uno
origen
y otro destino, que así ya lo tengo) una serie de






rutas
donde estan los
archivos de origen, sabes si hay alguna manera de




tratar etiquetas o
similar?.

La idea es algo así como:

fichero.txt

[ORIGEN]
\\maquina1ecurso\compartido
\\maquina2ecurso\compartido
\\maquina3ecurso\compartido
\\maquina4ecurso\compartido
\\maquina5ecurso\compartido
\\maquina6ecurso\compartido
\\maquina7ecurso\compartido
\\maquina8ecurso\compartido

[DESTINO]
\\servidorecurso\compartido

y que en el bat en el for que voy a usar para leer los




origenes, se pare
cuando llegue a la etiqueta siguiente (ahora que lo




pienso creo que se me
está ocurriendo una manera, pero no se si va a




funcionar, mañana lo
pruebo)

Salu2
Packo

"JM Tella Llop [MVP Windows]"




escribió en el mensaje
news:%
set /p variable="texto de la pregunta"

esto muestra el "texto de la pregunta" y espera una




respuesta que meterá
en
"variable".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías




de ninguna clase, y
no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties,




and confers no
rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
Estoy haciendo un archivo por lotes que lea entradas






de un fichero de
texto
y lo tengo más o menos terminado. El tema es que






necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en






funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de






solicitar datos por
teclado al usuario o me lo tengo que currar en C o






similar?

Salu2
Packo










.



.

Respuesta Responder a este mensaje
#8 JM Tella Llop [MVP Windows]
08/06/2004 - 15:33 | Informe spam
muchas... :-)

pero luego... que ahora tengo que salir.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




wrote in message news:1970c01c44d4b$3c69f740$
Muchas gracias Jose Manuel. (ya no encontraba el post,
está ya en la pagina 8 :O)

Una vez abusando xDDDD

Llevo toda la mañana pensando como hacerlo y no soy capaz
de hacerlo.

La idea es cojer el nombre de las maquinas origen y
anteponerselo al nombre de los ficheros que tienen dichas
maquinas. Me explico:

[ORIGEN]
\\maquina1ecurso
\\maquina2ecurso
\\IP3ecurso

[DESTINO]
\\maquina3\destino

Dentro de los origenes hay archivos con el formato
AAAAMMDD.txt y como el destino es común a los origenes,
tengo que añadirle el nombre de la maquina o la IP (lo que
aparezca en la ruta), de tal manera que en el destino el
archivo se llame maquina1.2004.06.05.txt (mientras que en
origen se llama 20040605.txt).

Se te ocurre alguna forma facilita de hacerlo?

Salu2
Packo

Anda... prueba esto -QUE FUNCIONA-: (y cuidado, usa


cortar y pegar para que no tome retornos de linea)

@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destino>for /f "skip=%ld% tokens=* delims=" %%i in (cert.ini) do


if "%origen%." == "." set destino=%%i
for /f "skip=%lo% tokens=* delims=" %%i in (cert.ini) do


set nz=%%i&if "!nz:~,1!" == "[" (goto :eof) ELSE if "!
nz:~,1!" == "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
echo haz lo que quieras con %1 y %2


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" wrote in message


news:1916401c44c8b$ec47f380$
amos a ver, pq creo q me estoy liando :(

tengo un cert.bat con el siguiente contenido:

set cont=1
echo contador=%cont%
rem set /p ruta="ESCRIBE LA RUTA:"
rem echo %ruta%

:ORIGEN

for /f "tokens=* delims=" %%i in (cert.ini) do if "%%i"
== "[ORIGEN]" (
for /f "tokens=* delims=" %%i in (cert.ini) do
set /A cont=%cont%+1 & set origen= %%i)

echo origen=%origen% & echo contador=%cont%)

goto :DESTINO


:DESTINO

rem for /f "tokens=* delims=" %%i in (cert.ini) do if "%%
i" == "[DESTINO]" (
rem for /f "tokens=* delims=" %%i in (cert.ini) do set
destino=%%i)
rem echo %destino%




goto :EOF

:EOF


y un cert.ini con el siguiente

[ORIGEN]
\\10.40.1.75\pruebas
\\10.40.1.75\pruebas2




[DESTINO]
\\10.40.1.75\destino




El problema que tengo a falta de seguir dandole vueltas


es
que me guarde las entradas que cuelgan de ORIGEN en
variables independientes. Alguna sugerencia?

SAlu2
Packo

Eso es (bueno, mas o menos :-$) lo que habia pensado.
es q esto de estar pensando el domingo en el curro no es


bueno :(

La idea es coger de una serie de maquinas (las rutas que


están debajo de la
etiqueta [ORIGEN]) los archivos que estan en ellas y


dejarlos en la ruta que
está en la etiqueta [DESTINO] renombrandolo a


NombreDeMaquina.AAAA.MM.DD (el
nombre original es AAAAMMDD)

Lo del renombrar creo que lo tengo solucionado con la


veriable
%computername% o bien cogiendo el nombre de la linea


del 'ini'

Salu2
Packo

"JM Tella Llop [MVP Windows]"


escribió en el mensaje
news:
for /f "tokens=* delims=" %i in (fichero.txt) do if "%i"


== "[DESTINO] goto
:EOF

es que no te entiendo muy bien si me dices completo


que quieres
hacer.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
joder, no se me habia ocurrido. Muchas gracias Jose




Manuel

Ya que estamos... ;) Lo que tengo que hacer es que el




bat coja de un
fichero
de texto una ruta de un servidor que es donde va a




depositar una serie de
archivos y del mismo fichero (a las malas lo haré con






2
ficheros, uno
origen
y otro destino, que así ya lo tengo) una serie de






rutas
donde estan los
archivos de origen, sabes si hay alguna manera de




tratar etiquetas o
similar?.

La idea es algo así como:

fichero.txt

[ORIGEN]
\\maquina1ecurso\compartido
\\maquina2ecurso\compartido
\\maquina3ecurso\compartido
\\maquina4ecurso\compartido
\\maquina5ecurso\compartido
\\maquina6ecurso\compartido
\\maquina7ecurso\compartido
\\maquina8ecurso\compartido

[DESTINO]
\\servidorecurso\compartido

y que en el bat en el for que voy a usar para leer los




origenes, se pare
cuando llegue a la etiqueta siguiente (ahora que lo




pienso creo que se me
está ocurriendo una manera, pero no se si va a




funcionar, mañana lo
pruebo)

Salu2
Packo

"JM Tella Llop [MVP Windows]"




escribió en el mensaje
news:%
set /p variable="texto de la pregunta"

esto muestra el "texto de la pregunta" y espera una




respuesta que meterá
en
"variable".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías




de ninguna clase, y
no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties,




and confers no
rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
Estoy haciendo un archivo por lotes que lea entradas






de un fichero de
texto
y lo tengo más o menos terminado. El tema es que






necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en






funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de






solicitar datos por
teclado al usuario o me lo tengo que currar en C o






similar?

Salu2
Packo










.



.

Respuesta Responder a este mensaje
#9 JM Tella Llop [MVP Windows]
08/06/2004 - 17:45 | Informe spam
A ver lo delimitado entre los =
@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destinofor /f "skip=%ld% tokens=* delims= " %%i in (cert.ini) do set no=%%i&if "!no:~,1!" EQU "\" if "%origen%." EQU "." set destino=%%i
for /f "skip=%lo% tokens=* delims= " %%i in (cert.ini) do set nz=%%i&if "!nz:~,1!" EQU "[" (goto :eof) ELSE if "!nz:~,1!" EQU "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
for /f "tokens=1,* delims=\ " %%c in ('echo %1') do set prefix=%%c
for %%f in (%1\*.*) do echo copy "%%f" "%2\%prefix%.%%~nf%%~xf"
goto :eof

Si en la penultima linea "do echo copy" le quita el "echo" copiara de veras. Con el "echo", verás lo que va a copiar.

NOTA: el primer caracter de las lineas "activas" de copia debe tener un "\" de tal manera que si lemtes un caracter diferente, como ";" o "*" por ejemplo, lo tomará como comentario. Por ejemplo:


[ORIGEN]
\\ka\pruebas
;\\172.26.0.2\pruebas < comentario


[DESTINO]
\\10.40.1.75\destino


++++++++++++ el ejemplo anterior, la maquina origen tiene dos archivos. Su ejecucion da:

copy "\\ka\pruebas\aaaa.txt" "\\10.40.1.75\destino\ka.aaaa.txt"
copy "\\ka\pruebas\New Text Document.txt" "\\10.40.1.75\destino\ka.New Text Document.txt"


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




"JM Tella Llop [MVP Windows]" wrote in message news:
muchas... :-)

pero luego... que ahora tengo que salir.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




wrote in message news:1970c01c44d4b$3c69f740$
Muchas gracias Jose Manuel. (ya no encontraba el post,
está ya en la pagina 8 :O)

Una vez abusando xDDDD

Llevo toda la mañana pensando como hacerlo y no soy capaz
de hacerlo.

La idea es cojer el nombre de las maquinas origen y
anteponerselo al nombre de los ficheros que tienen dichas
maquinas. Me explico:

[ORIGEN]
\\maquina1ecurso
\\maquina2ecurso
\\IP3ecurso

[DESTINO]
\\maquina3\destino

Dentro de los origenes hay archivos con el formato
AAAAMMDD.txt y como el destino es común a los origenes,
tengo que añadirle el nombre de la maquina o la IP (lo que
aparezca en la ruta), de tal manera que en el destino el
archivo se llame maquina1.2004.06.05.txt (mientras que en
origen se llama 20040605.txt).

Se te ocurre alguna forma facilita de hacerlo?

Salu2
Packo

Anda... prueba esto -QUE FUNCIONA-: (y cuidado, usa


cortar y pegar para que no tome retornos de linea)

@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destino>for /f "skip=%ld% tokens=* delims=" %%i in (cert.ini) do


if "%origen%." == "." set destino=%%i
for /f "skip=%lo% tokens=* delims=" %%i in (cert.ini) do


set nz=%%i&if "!nz:~,1!" == "[" (goto :eof) ELSE if "!
nz:~,1!" == "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
echo haz lo que quieras con %1 y %2


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" wrote in message


news:1916401c44c8b$ec47f380$
amos a ver, pq creo q me estoy liando :(

tengo un cert.bat con el siguiente contenido:

set cont=1
echo contador=%cont%
rem set /p ruta="ESCRIBE LA RUTA:"
rem echo %ruta%

:ORIGEN

for /f "tokens=* delims=" %%i in (cert.ini) do if "%%i"
== "[ORIGEN]" (
for /f "tokens=* delims=" %%i in (cert.ini) do
set /A cont=%cont%+1 & set origen= %%i)

echo origen=%origen% & echo contador=%cont%)

goto :DESTINO


:DESTINO

rem for /f "tokens=* delims=" %%i in (cert.ini) do if "%%
i" == "[DESTINO]" (
rem for /f "tokens=* delims=" %%i in (cert.ini) do set
destino=%%i)
rem echo %destino%




goto :EOF

:EOF


y un cert.ini con el siguiente

[ORIGEN]
\\10.40.1.75\pruebas
\\10.40.1.75\pruebas2




[DESTINO]
\\10.40.1.75\destino




El problema que tengo a falta de seguir dandole vueltas


es
que me guarde las entradas que cuelgan de ORIGEN en
variables independientes. Alguna sugerencia?

SAlu2
Packo

Eso es (bueno, mas o menos :-$) lo que habia pensado.
es q esto de estar pensando el domingo en el curro no es


bueno :(

La idea es coger de una serie de maquinas (las rutas que


están debajo de la
etiqueta [ORIGEN]) los archivos que estan en ellas y


dejarlos en la ruta que
está en la etiqueta [DESTINO] renombrandolo a


NombreDeMaquina.AAAA.MM.DD (el
nombre original es AAAAMMDD)

Lo del renombrar creo que lo tengo solucionado con la


veriable
%computername% o bien cogiendo el nombre de la linea


del 'ini'

Salu2
Packo

"JM Tella Llop [MVP Windows]"


escribió en el mensaje
news:
for /f "tokens=* delims=" %i in (fichero.txt) do if "%i"


== "[DESTINO] goto
:EOF

es que no te entiendo muy bien si me dices completo


que quieres
hacer.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
joder, no se me habia ocurrido. Muchas gracias Jose




Manuel

Ya que estamos... ;) Lo que tengo que hacer es que el




bat coja de un
fichero
de texto una ruta de un servidor que es donde va a




depositar una serie de
archivos y del mismo fichero (a las malas lo haré con






2
ficheros, uno
origen
y otro destino, que así ya lo tengo) una serie de






rutas
donde estan los
archivos de origen, sabes si hay alguna manera de




tratar etiquetas o
similar?.

La idea es algo así como:

fichero.txt

[ORIGEN]
\\maquina1ecurso\compartido
\\maquina2ecurso\compartido
\\maquina3ecurso\compartido
\\maquina4ecurso\compartido
\\maquina5ecurso\compartido
\\maquina6ecurso\compartido
\\maquina7ecurso\compartido
\\maquina8ecurso\compartido

[DESTINO]
\\servidorecurso\compartido

y que en el bat en el for que voy a usar para leer los




origenes, se pare
cuando llegue a la etiqueta siguiente (ahora que lo




pienso creo que se me
está ocurriendo una manera, pero no se si va a




funcionar, mañana lo
pruebo)

Salu2
Packo

"JM Tella Llop [MVP Windows]"




escribió en el mensaje
news:%
set /p variable="texto de la pregunta"

esto muestra el "texto de la pregunta" y espera una




respuesta que meterá
en
"variable".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías




de ninguna clase, y
no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties,




and confers no
rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
Estoy haciendo un archivo por lotes que lea entradas






de un fichero de
texto
y lo tengo más o menos terminado. El tema es que






necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en






funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de






solicitar datos por
teclado al usuario o me lo tengo que currar en C o






similar?

Salu2
Packo










.



.

Respuesta Responder a este mensaje
#10 Packo
08/06/2004 - 22:32 | Informe spam
muchas gracias Jose, te debo una cocacola o lo que quieras xDDDDD

Ya seguiré preguntando cosillas, porque me está empezando a picar la
curiosidad cada vez más de la consola :)

SAlu2
Packo

"JM Tella Llop [MVP Windows]" escribió en el mensaje
news:uL91m%
A ver lo delimitado entre los =
@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[ORIGEN]" cert.ini')
do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in ('FIND /N "[DESTINO]"
cert.ini') do set ld=%%i

set destinofor /f "skip=%ld% tokens=* delims= " %%i in (cert.ini) do set no=%%i&if
"!no:~,1!" EQU "\" if "%origen%." EQU "." set destino=%%i
for /f "skip=%lo% tokens=* delims= " %%i in (cert.ini) do set nz=%%i&if
"!nz:~,1!" EQU "[" (goto :eof) ELSE if "!nz:~,1!" EQU "\" call :proc00 %%i
%destino%
goto :eof
endlocal

:proc00
for /f "tokens=1,* delims=\ " %%c in ('echo %1') do set prefix=%%c
for %%f in (%1\*.*) do echo copy "%%f" "%2\%prefix%.%%~nf%%~xf"
goto :eof

Si en la penultima linea "do echo copy" le quita el "echo" copiara de
veras. Con el "echo", verás lo que va a copiar.

NOTA: el primer caracter de las lineas "activas" de copia debe tener un "\"
de tal manera que si lemtes un caracter diferente, como ";" o "*" por
ejemplo, lo tomará como comentario. Por ejemplo:


[ORIGEN]
\\ka\pruebas
;\\172.26.0.2\pruebas < comentario


[DESTINO]
\\10.40.1.75\destino


++++++++++++ el ejemplo anterior, la maquina origen tiene dos archivos. Su
ejecucion da:

copy "\\ka\pruebas\aaaa.txt" "\\10.40.1.75\destino\ka.aaaa.txt"
copy "\\ka\pruebas\New Text Document.txt" "\\10.40.1.75\destino\ka.New Text
Document.txt"


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




"JM Tella Llop [MVP Windows]" wrote in message
news:
muchas... :-)

pero luego... que ahora tengo que salir.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.




wrote in message
news:1970c01c44d4b$3c69f740$
Muchas gracias Jose Manuel. (ya no encontraba el post,
está ya en la pagina 8 :O)

Una vez abusando xDDDD

Llevo toda la mañana pensando como hacerlo y no soy capaz
de hacerlo.

La idea es cojer el nombre de las maquinas origen y
anteponerselo al nombre de los ficheros que tienen dichas
maquinas. Me explico:

[ORIGEN]
\\maquina1ecurso
\\maquina2ecurso
\\IP3ecurso

[DESTINO]
\\maquina3\destino

Dentro de los origenes hay archivos con el formato
AAAAMMDD.txt y como el destino es común a los origenes,
tengo que añadirle el nombre de la maquina o la IP (lo que
aparezca en la ruta), de tal manera que en el destino el
archivo se llame maquina1.2004.06.05.txt (mientras que en
origen se llama 20040605.txt).

Se te ocurre alguna forma facilita de hacerlo?

Salu2
Packo

Anda... prueba esto -QUE FUNCIONA-: (y cuidado, usa


cortar y pegar para que no tome retornos de linea)

@echo off
setlocal enabledelayedexpansion

for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[ORIGEN]" cert.ini') do set lo=%%i
for /f "skip=2 tokens=1,* delims=[] " %%i in


('FIND /N "[DESTINO]" cert.ini') do set ld=%%i

set destino>for /f "skip=%ld% tokens=* delims=" %%i in (cert.ini) do


if "%origen%." == "." set destino=%%i
for /f "skip=%lo% tokens=* delims=" %%i in (cert.ini) do


set nz=%%i&if "!nz:~,1!" == "[" (goto :eof) ELSE if "!
nz:~,1!" == "\" call :proc00 %%i %destino%
goto :eof
endlocal

:proc00
echo haz lo que quieras con %1 y %2


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" wrote in message


news:1916401c44c8b$ec47f380$
amos a ver, pq creo q me estoy liando :(

tengo un cert.bat con el siguiente contenido:

set cont=1
echo contador=%cont%
rem set /p ruta="ESCRIBE LA RUTA:"
rem echo %ruta%

:ORIGEN

for /f "tokens=* delims=" %%i in (cert.ini) do if "%%i"
== "[ORIGEN]" (
for /f "tokens=* delims=" %%i in (cert.ini) do
set /A cont=%cont%+1 & set origen= %%i)

echo origen=%origen% & echo contador=%cont%)

goto :DESTINO


:DESTINO

rem for /f "tokens=* delims=" %%i in (cert.ini) do if "%%
i" == "[DESTINO]" (
rem for /f "tokens=* delims=" %%i in (cert.ini) do set
destino=%%i)
rem echo %destino%




goto :EOF

:EOF


y un cert.ini con el siguiente

[ORIGEN]
\\10.40.1.75\pruebas
\\10.40.1.75\pruebas2




[DESTINO]
\\10.40.1.75\destino




El problema que tengo a falta de seguir dandole vueltas


es
que me guarde las entradas que cuelgan de ORIGEN en
variables independientes. Alguna sugerencia?

SAlu2
Packo

Eso es (bueno, mas o menos :-$) lo que habia pensado.
es q esto de estar pensando el domingo en el curro no es


bueno :(

La idea es coger de una serie de maquinas (las rutas que


están debajo de la
etiqueta [ORIGEN]) los archivos que estan en ellas y


dejarlos en la ruta que
está en la etiqueta [DESTINO] renombrandolo a


NombreDeMaquina.AAAA.MM.DD (el
nombre original es AAAAMMDD)

Lo del renombrar creo que lo tengo solucionado con la


veriable
%computername% o bien cogiendo el nombre de la linea


del 'ini'

Salu2
Packo

"JM Tella Llop [MVP Windows]"


escribió en el mensaje
news:
for /f "tokens=* delims=" %i in (fichero.txt) do if "%i"


== "[DESTINO] goto
:EOF

es que no te entiendo muy bien si me dices completo


que quieres
hacer.

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de


ninguna clase, y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and


confers no rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
joder, no se me habia ocurrido. Muchas gracias Jose




Manuel

Ya que estamos... ;) Lo que tengo que hacer es que el




bat coja de un
fichero
de texto una ruta de un servidor que es donde va a




depositar una serie de
archivos y del mismo fichero (a las malas lo haré con






2
ficheros, uno
origen
y otro destino, que así ya lo tengo) una serie de






rutas
donde estan los
archivos de origen, sabes si hay alguna manera de




tratar etiquetas o
similar?.

La idea es algo así como:

fichero.txt

[ORIGEN]
\\maquina1ecurso\compartido
\\maquina2ecurso\compartido
\\maquina3ecurso\compartido
\\maquina4ecurso\compartido
\\maquina5ecurso\compartido
\\maquina6ecurso\compartido
\\maquina7ecurso\compartido
\\maquina8ecurso\compartido

[DESTINO]
\\servidorecurso\compartido

y que en el bat en el for que voy a usar para leer los




origenes, se pare
cuando llegue a la etiqueta siguiente (ahora que lo




pienso creo que se me
está ocurriendo una manera, pero no se si va a




funcionar, mañana lo
pruebo)

Salu2
Packo

"JM Tella Llop [MVP Windows]"




escribió en el mensaje
news:%
set /p variable="texto de la pregunta"

esto muestra el "texto de la pregunta" y espera una




respuesta que meterá
en
"variable".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías




de ninguna clase, y
no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties,




and confers no
rights.
You assume all risk for your use.




"Packo" <packo#terraQUEOS.es> wrote in message
news:
Estoy haciendo un archivo por lotes que lea entradas






de un fichero de
texto
y lo tengo más o menos terminado. El tema es que






necesito que el bat haga
una pregunta y se quede esperando una respuesta, y en






funcion de esa
respuesta seguir ejecutandose. Hay alguna manera de






solicitar datos por
teclado al usuario o me lo tengo que currar en C o






similar?

Salu2
Packo










.



.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida