Ms-Dos - asignar ruta a variable

 
Vista:
sin imagen de perfil

asignar ruta a variable

Publicado por nicolas (9 intervenciones) el 16/01/2016 09:09:05
Hola buenos dias,

gracias de antemano

quiero obtener la ruta de un archivo, y la busco con la siguiente instruccion, y consigo escribirla en el archivo log.txt:

dir /a/b/s "D:\EasyDent4\File Server\Files" | find /I "p20160115_170139_0" >>log.txt

pero, intento asignar el resultado a la variable _ruta, y no consigo nada decente...

???
set ruta
dir /a/b/s "D:\ED4\Files" | find /I "p20160115_170139_0" >%_ruta%
???
set ruta = dir /a/b/s "D:\ED4\Files" | find /I "p20160115_170139_0"
???

alguna idea....

mil gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de A.H.H.

asignar ruta a variable

Publicado por A.H.H. (216 intervenciones) el 16/01/2016 16:23:29
Hola teniendo la linea que mencionabas que te funcionaba y te ponia la ruta en un archivo.log pues puedes usar un FOR
para leer el archivo.log y meter la linea en la variable ruta asi:

1
2
3
4
5
@echo off
dir /a/b/s "D:\EasyDent4\File Server\Files" | find /I "p20160115_170139_0" >>log.txt
for /f %%a in (log.txt) do set ruta=%%a
echo ruta= %ruta%
pause
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

asignar ruta a variable

Publicado por nicolas (9 intervenciones) el 16/01/2016 16:50:56
Hola A.H.H. y ante todo gracias!

si al final no encuentro la manera de asignarlo directamente a la variable, lo haré así tal y como me indicas, escribiendo en un fichero y leyendo de allí. Esto querría decir que tendría que generar un fichero para este propósito, no? Es lo normal, generar ficheros para almacenar resultados de variables?

Grcias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

asignar ruta a variable

Publicado por A.H.H. (1 intervención) el 16/01/2016 19:55:32
Hola de nuevo se me olvido comentarte que tambien lo puedes meter todo dentro del FOR sin archivos intermedios
y quedaria asi:

1
2
3
4
@echo off
for /f "tokens=*" %%a in ('dir /a/b/s "D:\EasyDent4\File Server\Files" ^|find /I "p20160115_170139_0"') do (set ruta=%%a)
echo ruta= %ruta%
pause



salu2 esta opcion te gustara mas.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

asignar ruta a variable

Publicado por nicolas (9 intervenciones) el 16/01/2016 21:15:52
Pues si! creo que me va mejor y todo!

gracias!!

no entiendo mucho los FOR en batch, habrá que mirarlo bien porque parece la solución para muchas cosas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

asignar ruta a variable

Publicado por nicolas (9 intervenciones) el 16/01/2016 21:48:30
Siguiendo con el programita... me encuentro el siguiente problema:

quiero copiar el archivo de la ruta, pero por lo que estoy leyendo, para hacer un copy del tipo:

copy c:\directorio\directorio con nombre largo\archivo.txt d:\ (que me devuelve error de archivo no encontrado.)

debo poner comillas del tipo:

copy c:\directorio\"directorio con nombre largo"\archivo.txt d:\archivo.txt

entonces sí funciona. Hay manera de realizar este truquito si es una variable la que contiene la ruta? Debo editar el string para añadir comillas?

La línea siguiente me devuelve el error de "el sistema no pudo encontrar el archivo", ya que %%a = c:\directorioconnombrelargo\directorioconnombrelargo\archivo.txt

copy %%a %%a_2

PD: debería abrir un tema nuevo?

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

asignar ruta a variable

Publicado por A.H.H. (216 intervenciones) el 16/01/2016 21:53:55
Hola

basta con que pongas comillas en set ruta="%%a"
en el final de la línea:

for /f "tokens=*" %%a in ('dir /a/b/s "D:\EasyDent4\File Server\Files" ^|find /I "p20160115_170139_0"') do (set ruta="%%a")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

asignar ruta a variable

Publicado por A.H.H. (216 intervenciones) el 16/01/2016 22:01:34
HOLA
una vez que lo tenemos en la variable ruta con comillas usamos

copy %ruta% "donde quieras"


tambien si NO esta en la variable ruta con comilllas se puede usar

copy " %ruta%" "donde quieras"

NO puedes usar la variable que corre directamente del FOR %%a tienes que recoger el resultado en otra variable como en tu caso hicimos con ruta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

asignar ruta a variable

Publicado por nicolas (9 intervenciones) el 17/01/2016 07:58:37
Buenos días,

El siguiente código:

1
2
3
4
5
6
7
for /f "tokens=*" %%a in (
	'dir /a/b/s "D:\directorio\" ^|find /I "p%c_date%"'
	) do (
	set ruta=%%a
	echo ruta="%ruta%"
	echo ruta="%%a"
)

Me devuelve:

1
2
3
4
5
6
7
8
Variable de entorno c_date no definida
Variable de entorno c_date_mod no definida
ruta=""
ruta="D:\directorio\directoriolargo\p20160115_170139_0000.bmp"
ruta=""
ruta="D:\directorio\directoriolargo\p20160115_170139_0000.tag"
ruta=""
ruta="D:\directorio\directoriolargo\p20160115_170139_0000T.bmp"

Por lo que yo veo, cuando hago un echo de la variable %ruta% no me devuelve nada, y si lo hago de %%a sí me lo devuelve. Porqué no debo utilizar la variable %ruta%? Fuera del FOR debo utilizar %ruta%, y dentro podria utilizar %%a? Sería correcto?

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

asignar ruta a variable

Publicado por Antoni Masana (811 intervenciones) el 18/01/2016 11:21:56
El comando FOR y el comando SET si se utilizan conjuntamente dan problemas.

Hay varias formas de resolver el problema.

Solución propuesta por Microsoft:

1
2
3
4
5
for /f "tokens=*" %%a in ('dir /a/b/s "D:\directorio\" ^|find /I "p%c_date%"') do (
	set ruta=%%a
	echo ruta="!ruta!"
	echo ruta="%%a"
)

En la línea 4 se cambia el carácter % por el carácter !

Mi propuesta

1
2
3
4
5
6
7
for /f "tokens=*" %%a in ('dir /a /b /s "D:\directorio\" ^| find /I "p%c_date%"' ) do call :Rutina %%a
GOTO :EOF
 
:Rutina
	set ruta=%1
	echo ruta="%ruta%"
	echo ruta="%1"



Consulta:

1
2
C:\> SET /?
C:\> FOR /?

Si te lees la ayuda del comando SET veras que la primera solución puede fallar según que en que equipo lo ejecutes.

El segundo funciona siempre.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar