Ms-Dos - Recuperar nombres de archivos

   
Vista:

Recuperar nombres de archivos

Publicado por Carina (13 intervenciones) el 18/10/2007 19:30:16
Hola a todos: estoy haciendo un script para renombrar unos archivos, el tema es que cuando recorro el directorio con este codigo

@echo off
set actual=""
for %%i in (*.*) do (
set actual=%%i
echo %actual
)

no me actualiza la variable actual.. siempre me muestra la ultima y quiero que a cada archivo en ese directorio (en realidad me interesa el nombre) asignarselo a esa variable asi puedo rearmar su nombre y copiarlo en otro directorio.

Ya probe de un monton de formas y no puedo resolverlo.....que estoy haciendo mal?
Muchas gracias!!!

Carina
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

RE:Recuperar nombres de archivos

Publicado por Antoni Masana (295 intervenciones) el 19/10/2007 06:46:37
Hay una nota del 23-02-2007 Que plantea el mismo problema y tiene dos posibles soluciones.
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

RE:Recuperar nombres de archivos

Publicado por Carina (13 intervenciones) el 19/10/2007 14:02:14
Antoni: muchas gracias, me lei casi todo el foro y no vi ese post.....
Lei atentamente e hice la opcion del cmd /v on...
Pero ahora me surge otra duda.....

el script lo deje asi

@echo off
set actual=
for %%i in (*.*) do set actual=!actual! %%i
echo %actual%

de esta forma es como que me concatena todos los nombres de archivo... entonces lo que hice fue ponerle parentesis para que con cada archivo me lo muestre solo

@echo off
set actual=
for %%i in (*.*) do
( set actual=!actual! %%i
echo %actual%
)

Con esto me dice que el echo esta desactivado.. el tema es que cuando recupero el nombre de cada archivo lo desgloso y rearmo el nombre para renombrar el archivo, esa parte funciona bien pero tengo que unirla a esta y es mas o menos asi:

set myVar=NLLL14 1041 6-05-2007.EXT --> aca tendria que poner el nombre de cada archivo recuperado anteriormente
set tipo=%myVar:~4,2%
set hora=%myVar:~7,2%
set dia=%myVar:~11,2%
set mes=%myVar:~14,2%
set anio=%myVar:~17,4%
set nuevo_nombre=%anio%-%mes%-%dia%-%hora%-%tipo%.EXT

Que me aconsejas que haga?...
Muchas gracias por responder..
Saludos
Carina
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

RE:Recuperar nombres de archivos

Publicado por Antoni Masana (295 intervenciones) el 22/10/2007 07:28:24
Te ponga la respuesta que te comentaba y despues te comento más:

========================================
El SET dentro de un FOR o un IF no acaba de estar muy bien resuelto, da bastantes problemas. La solucion que encontre es volver a los origenes, es decir en lugar de esto:

IF %VAR% == BIEN (
SET VAR_2=PASO-1
ECHO "Texto - 1"
) ELSE (
SET VAR_2=PASO-2
ECHO "Texto - 2"
)

Esto siembre funciona:

IF not %VAR% == BIEN goto ELSE
SET VAR_2=PASO-1
ECHO "Texto - 1"
GOTO ENDIF
:ELSE
SET VAR_2=PASO-2
ECHO "Texto - 2"
:ENDIF

El lugar de esto:

FOR %%a IN (1 2 3 4 5 ) do SET VAR=%VAR% %%a

Esto siempre funciona

@echo off

IF "%1" == "/@" goto Bucle

FOR %%a in (1 2 3 4 5) do call %0 /@ %a
goto Fin

:Bucle
SET VAR=%VAR% %2

:Fin

Segun que se desea hacer con un FOR o un IF no acaba de ir bien sobre todo la asignación de variables mediante el comando SET, estos ejemplos solo pretenden ser una forma de mostrar una solución alternativa.

Un saludo
================================================

Yo me inclino por lo clasico, quizas se por la edad o la nostalgia o porque siempre funciona y en cualquier version de DOS.

Mi consejo es que el FOR llame a un BAT y le pase el parametro. Este BAT puede ser el mismo del FOR u otro. Es mejor que intentar meterlo dentro del FOR, al menos sabes que se comporada como deseas y no como le de la gana.

==> Solucion - 1 ( 2 BAT's)

___BAT - 1___

FOR /F "tokens=1 delims=:" %%A IN ('TYPE news_files.txt') DO call BAT_2 %%A

___BAT - 2___

set myVar=%1
set tipo=%myVar:~4,2%
set hora=%myVar:~7,2%
set dia=%myVar:~11,2%
set mes=%myVar:~14,2%
set anio=%myVar:~17,4%
set nuevo_nombre=%anio%-%mes%-%dia%-%hora%-%tipo%.EXT

XCOPY version8\%myVar% version7\%nuevo_nombre%

==> Solucion - 2 ( 1 BAT )

___BAT - 1___

@echo off

IF "%1" == "/@" goto Bucle

FOR /F "tokens=1 delims=:" %%A IN ('TYPE news_files.txt') DO call %0 /@ %%A
goto Fin

:Bucle
set myVar=%2
set tipo=%myVar:~4,2%
set hora=%myVar:~7,2%
set dia=%myVar:~11,2%
set mes=%myVar:~14,2%
set anio=%myVar:~17,4%
set nuevo_nombre=%anio%-%mes%-%dia%-%hora%-%tipo%.EXT

XCOPY version8\%myVar% version7\%nuevo_nombre%

:Fin

OJO Cuidado con los espacios al final de la linea del SET dan algunos problemas.

Un Saludo.
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

RE:Recuperar nombres de archivos

Publicado por Carina (13 intervenciones) el 22/10/2007 14:02:02
Antoni: muchas gracias!!!!!! probe de las 2 formas, me resulto mas comodo y mas facil la de los 2 bat's. Funciona de 10.

Lo unico es que cuando hace la copia del archivo por cada archivo que copia me pregunta si ese nuevo nombre especifica un archivo o directorio. ¿como hago para que no me lo pregunte mas y copie y renombre los archivos?....

De nuevo.... muchisimas graciasssss

Saludos

Carina
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

RE:Recuperar nombres de archivos

Publicado por Carina (13 intervenciones) el 22/10/2007 14:04:50
Antoni: no habia leido el post siguiente..... solucionado con

echo F|xcopy .....

muchas 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