Ms-Dos - Mover archivos por lotes a una carpeta consecutivas

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Mover archivos por lotes a una carpeta consecutivas

Publicado por quique (3 intervenciones) el 04/05/2018 14:24:44
Buenos dias

llevo mas de una semana peleandome con un script en windows que quiero crear para mover muchos videos (con acentos, numeros y demas) que tengo en una serie de carpetas de forma que tenga una carpeta con 9 carpetas dentro y en cada una de estas carpetas haya 10 ficheros, esto es facil, con dos for lo tengo hecho
1
2
3
4
5
6
for %%A in ($1_PRIMERO,$2_SEGUNDO,$3_TERCERO,$4_CUARTO,$5_QUINTO,$6_SEXTO,$7_SEPTIMO,$8_OCTAVO,$9_NOVENO) do (
	md %%A
	for /L %%B in (1,1,9) do (
		md %%A\%%B
	)
)
ahora viene lo complicado, tengo que seleccionar 10 ficheros de la ruta e irlos moviendo. se me ha ocurrido varias opciones, que paso a listar
Listo todo el contenido del directorio a un fichero (los parameteros que pongo son principalemente para que solo este el nombre del fichero y moverlo) (si se os ocurre alguna opcion para que se ordene como lo hace windows, es decir el 2 vaya despues del 1 y no del 10, pero esto es segundario jajaja))
1
dir /b /On /oG >ZZZ_listado.txt
Coger leer el fichero y moverlos a la carpeta correspondiente
1
2
3
4
for /f "tokens=*" %%h in (ZZZ_listado.txt) do (
	move "%%h" %%A\%%B
	echo mueve el fichero %%h a la ruta %%A\%%B
)
el problema de esta opcion es que mueve TODO el contenido del fichero (tiene sentido, no le pones ningun filtro)
ahora viene lo complicado, seleccionar solo 10 archivos para moverlos
aqui me he vuelto loco
he ido probando un monton de opciones, pero no he sacado nada claro
1
2
3
4
5
6
7
for /L %%q in (1,1,10) do (
	dir /b /On /oG ZZZ_listado.txt
	for /f "tokens=*" %%h in (ZZZ_listado.txt) do (
		move "%%h" %%A\%%B
		pause
	)
)
Al leer todo el fichero en el bucle, no hace el bucle de 10 previo
1
2
3
4
5
6
7
8
9
10
for /L %%v in (1,1,10) do (
	dir /A-D /b /On >ZZZ_listado.txt
	for /f "tokens=*" %%h in (ZZZ_listado.txt) do (
		move "%%h" %%A\%%B
		set /a v=%%v+1
			IF /I "%%v" EQU "10" (goto :fin)
		echo "2 la variable q es %%v"
		pause
	)
)
otra opcion es crear un arhivo, leerlo y cuando llegue a los 10 salir del bucle, y al salir, creo otra vez el listado (ya que ha movido los 10 primeros) pero no funciona
cualquier cosilla, o consejo, aqui estoy

Adjunto un script donde se crean varios archivos dependiendo de la variable que le pases por consola y lo lista en el fichero

1
2
3
4
5
set /p v=numero de veces
For /L %%A in (1,1,%v%) DO (
	touch "archivo "%%A".txt"
)
dir /b /On /oG >ZZZ_listado.txt

Un saludo
Quique_cortes
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 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

Mover archivos por lotes a una carpeta consecutivas

Publicado por Antoni Masana (811 intervenciones) el 05/05/2018 11:16:30
Buenos días Quique

Estoy viendo esto y empieza a darme vueltas la cabeza porque no me cuadran los números, empiezo mal.

En el primer código creas 9 carpetas y dentro de cada una 9 carpetas más en total 81 carpetas.

Después dices que debes mover 10 ficheros a una carpeta, que supongo sera la primera carpeta $1_PRIMERA\1 lo 10 siguientes a la carpeta $1_PRIMER\2 y así sucesibamente.

Se me ha ocurrido una cosa y te envio un ejemplo, si lo entiendes puedes aplicarlo a tu proceso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo off
SETLOCAL ENABLEDELAYEDEXPANSION
 
Set Pun=0
for %%A in ($1_PRIMERO,$2_SEGUNDO,$3_TERCERO,$4_CUARTO,$5_QUINTO,$6_SEXTO,$7_SEPTIMO,$8_OCTAVO,$9_NOVENO) do (
    md %%A
    for /L %%B in (1,1,9) do (
        md %%A\%%B
        Set /A Pun+=1
        Set Dir[%Pun%]=%1
    )
)
 
Set P=1
echo !Dir[%P%]!
Set P=2
echo !Dir[%P%]!
pause
 
For /L %%c in (1,1,%Pun%) do @echo !Dir[%%c]!
goto :Eof

Básicamente consiste en crear los directorios y guardar los nombres en una tabla.

Cuando copias los ficheros usas un contador y cuando has copiado 10 fichero sumas uno y buscas el siguiente elemento de la tabla de directorios, Facíl verdad.

Saludos.
\\//_
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

Mover archivos por lotes a una carpeta consecutivas

Publicado por Antoni Masana (811 intervenciones) el 05/05/2018 20:42:53
Este podria ser el BAT para mover los ficheros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
echo off
SETLOCAL ENABLEDELAYEDEXPANSION
 
Set Pun=0
for %%A in ($1_PRIMERO,$2_SEGUNDO,$3_TERCERO,$4_CUARTO,$5_QUINTO,$6_SEXTO,$7_SEPTIMO,$8_OCTAVO,$9_NOVENO) do (
    for /L %%B in (1,1,9) do (
        Set /A Pun+=1
        Set Dir[%Pun%]=%1
    )
)
 
Set Num=1
Set Pun=1
set Destino=!Dir[%Pun%]!
 
for /f "tokens=*" %%h in (ZZZ_listado.txt) do Call :Mover "%%h"
goto :Eof
 
:Mover
    echo mueve el fichero %1 a la ruta %Destino%
    move %1 %Destino%
    Set /A Num+=1
    IF %Num% LSS 11 goto :EOF
 
    set    Num=1
    set /A Pun+=1
    set Destino=!Dir[%Pun%]!
    goto :EOF

Puedes probarlo comentando la linea del MOVE y ver el OUTPUT

Un truco para la prueba y no tener que ir contando

1
2
:Mover
    echo %Num%.- mueve el fichero %1 a la ruta %Destino%

Saludos.
\\//_
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
Val: 5
Ha aumentado su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Mover archivos por lotes a una carpeta consecutivas

Publicado por quique (3 intervenciones) el 05/05/2018 21:16:43
Mi objetivo principal es coger mas de 3000 videos en grupos de 810 archivos (10 archivos por carpetas x 9 carpetas y x 9 carpetas) y asi irlos ordenando

el principal problema con el que me encuentro es que uso Windows 10, con lo que la mayoria de los comandos de MS-DOS, que usaba correctamente en mi anterior windows 7 ya no funcionan en el Powersell de esta nueva actualizacion

el for para crear las carpetas, lo tengo bien controlado, es cuando me enfrento a mover los archivos cuando me encuentro con el problema


cualquier consejo, estoy por aqui,

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
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

Mover archivos por lotes a una carpeta consecutivas

Publicado por Antoni Masana (811 intervenciones) el 07/05/2018 12:24:25
El BAT anterior me ha funcionado en Windows 10 pero no en Windows 7, misterios de la informática.

Este debería funcionar en los dos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
echo off
SETLOCAL ENABLEDELAYEDEXPANSION
Set Pun=0
for %%A in ($1_PRIMERO,$2_SEGUNDO,$3_TERCERO,$4_CUARTO,$5_QUINTO,$6_SEXTO,$7_SEPTIMO,$8_OCTAVO,$9_NOVENO) do Call :Paso_1 %%A
dir W:\Orpas\Orpas_PDF\*.PDF /B /S >ZZZ_Listado.txt
Set Num=1
Set Pun=1
set Destino=!Dir[%Pun%]!
for /f "tokens=*" %%h in (ZZZ_listado.txt) do Call :Mover "%%h"
goto :Eof
 
:Paso_1
    for /L %%B in (1,1,9) do Call :Paso_2 %1 %%B
    goto:eof
 
:Paso_2
    Set /A Pun+=1
    Set Dir[%Pun%]=%1\%2
    goto:EOF
 
:Mover
    echo %Pun% - %Num%.- Mueve el fichero %1 a la ruta !Destino! - %Destino%
    move %1 %Destino%
    Set /A Num+=1
    if %Num% LSS 11 goto :EOF
    set    Num=1
    set /A Pun+=1
    if %Pun% EQU 82 echo ERROR - No hay mas destinos para copiar
    if %Pun% EQU 82 exit /B
    set Destino=!Dir[%Pun%]!
    goto :EOF

Si tiene un código que ahora no te funciona lo puedes publicar y le damos un vistazo.

Saludos.
\\//_
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
Val: 5
Ha aumentado su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Mover archivos por lotes a una carpeta consecutivas

Publicado por quique (3 intervenciones) el 07/05/2018 23:06:16
nada,no se porque motivo,no consigo que me funcione,
realizo el bat para crear los ficheros con la modificacion para que funcione en W10
For /L %%A in (1,1,100) DO (
echo > "archivo "%%A".txt"
)
y al ejecutar tu bat, no consigo ningun movimiento, ni siquiera la creaccion de las carpetas ;(
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

Mover archivos por lotes a una carpeta consecutivas

Publicado por Antoni Masana (811 intervenciones) el 08/05/2018 12:25:56
Esto en Windows 10 funciona perfectamente.

1
2
For /L %%A in ( 1,1,  9) DO type nul > "archivo 0%%A.txt"
For /L %%A in (10,1,100) DO type nul > "archivo %%A.txt"

El TYPE NUL es para crear el fichero vacío.

El resultado es este

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
archivo 01.txt
archivo 02.txt
archivo 03.txt
archivo 04.txt
archivo 05.txt
archivo 06.txt
archivo 07.txt
archivo 08.txt
archivo 09.txt
archivo 10.txt
archivo 100.txt
archivo 11.txt
archivo 12.txt
archivo 13.txt
archivo 14.txt
archivo 15.txt
archivo 16.txt

Para poner tres dígitos en el número

1
2
3
For /L %%A in (  1,1,  9) DO type nul > "archivo 00%%A.txt"
For /L %%A in ( 10,1, 99) DO type nul > "archivo 0%%A.txt"
For /L %%A in (100,1,100) DO type nul > "archivo %%A.txt"

Saludos.
\\//_
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