Tengo este script por lotes que me permite copiar carpetas y su contenido desde un archivo de texto. ¿Alguien podría ayudarme a ajustarlo para que mueva/corte las carpetas+contenido y no solo copie?
set file_list=ready.txt
set dest_folder=c:\small\final
for /f "delims=" %%a in (%file_list%) do (
xcopy /Y "%%a*" "%dest_folder%%%~pa"
)
Respuesta1
Tenga en cuenta: no puede utilizar comodines con move
.
(y por favor haga file_list
-> dir_list
para mayor claridad).
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=c:\small\final\ok
mkdir %dest_folder%
for /f "delims=" %%a IN (%dir_list%) do (
set dir=%%a
if "!dir:~-1!"=="\" set dir=!dir:~0,-1!
move "!dir!" "%dest_folder%\"
)
Para directorios ready.txt
con cola final \
, se \
eliminará antes de move
.
Editar:
Dado que está moviendo los directorios de una unidad a otra,no poderusar move
. Aquí hay una solución con robocopy
:
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=d:\small\final\ok\
if "%dest_folder:~-1%"=="\" set dest_folder=%dest_folder:~0,-1%
for /f "delims=" %%a in (%dir_list%) do (
set dir1=%%a
if "!dir1:~-1!"=="\" set dir1=!dir1:~0,-1!
for %%f in (!dir1!) do set dir2=%%~nxf
robocopy "!dir1!" "%dest_folder%\!dir2!" /MOVE /E
)
Tenga en cuenta que robocopy
solo puede copiar y mover directorios completos y no archivos individuales. Entonces tu ready.txt
debería solo consistir en directorios. Los remolques \
están cuidados y se pueden mezclar.
Robocopy
necesita el nombre completo del directorio para el nuevo directorio, es por eso que necesitamos la
for %%f
línea - (para obtener la última parte del directorio del directorio de origen). Por lo tanto, necesita
robocopy c:\sub\meme d:\sub\meme
. No puedes hacerlo robocopy c:\sub\meme d:\sub
.
Puede probar este archivo por lotes colocándolo echo
antes del robocopy
archivo -
(y antes de move
en el ejemplo anterior).