Necesito un comando que se pueda ejecutar desde la línea de comandos para crear una carpeta para cada archivo (según el nombre del archivo) en un directorio y luego mover el archivo a las carpetas recién creadas.
Ejemplo:
Carpeta de inicio:
Dog.jpg
Cat.jpg
El siguiente comando funciona muy bien para crear una carpeta para cada nombre de archivo en el directorio de trabajo actual.
for %i in (*) do md "%~ni"
Carpeta de resultados:
\Dog\
\Cat\
Dog.jpg
Cat.jpg
Necesito ir un paso más allá y mover el archivo a la carpeta.
Lo que quiero lograr es:
\Dog\Dog.jpg
\Cat\Cat.jpg
¿Alguien puede ayudarme con un comando para hacer todo esto?
windows
batch-file
Tom
fuente
fuente
for %i in (*) do cmda && cmdb
B) podría hacer eco primerofor %i in (*) do @ECHO cmda && cmdb
C) podría agregar Creo que es un / R pasar por subdirectorios.for %i in (*) do move "%~i" "%~ni"
incluso eso podría no ser lo suficientemente bueno, ya que puede tener efectos secundarios cuando la carpeta de destino no existe (por ejemplo, los archivos se "mueven" sobre sí mismos, por lo tanto, se les cambia el nombre). Una solución fácil sería combinar ambos comandos, de esta manera:for %i in (*) do md "%~ni" && move "%~i" "%~ni"
el comando supone que los directorios ya no existen.cmda && cmdb
a continuación,cmdb
se ejecutará sólo sicmda
se ha realizado correctamente. Si fuera a usarlocmda & cmdb
, el segundo comando se ejecutaría independientemente. De hecho, un único ampersand (&
) es solo un separador de comandos y el doble ampersand (&&
) es condicional . Los comandos que no establecen unerrorlevel
valor no deben usarse con este último.Simplemente ejecute estos comandos en serie:
Para crear las carpetas para cada archivo:
Para mover cada archivo a su carpeta:
fuente
Esto lo hará si tiene algunas carpetas como: ejemplo years \ Filename.mp4
enumerará todos los archivos de carpeta de primer nivel; enumera todos * .mp4 y * .mkv creará las carpetas de 2 niveles con el nombre de archivo y moverá todos los mismos archivos de nombre en la carpeta de primer nivel a la carpeta de segundo nivel, ejecútelo en la carpeta base de años.
Si no tiene una carpeta AÑOS de primer nivel, puede omitir el primero y ejecutar el segundo paso, ejecútelo en la carpeta base de nombre de archivo.
El && se asegurará de que el mkdir% ERRORLEVEL% anterior sea 0 para ejecutar el movimiento de los archivos
Para probar, use esto:
fuente