Existe la forma en hacer que este .bat le pida al usuario el origen y el destino de la unidad.

Ejemplo el usuario corre el .bat y el escoge el origen del respaldo y escoge hacia que unidad desea pegarlo

@echo off
if F.==. Goto error

Echo ingrese Unidad Origen

Echo ingrese Unidad Destino
Echo Haciendo Respaldo del usuario %username% sobre unidad Destino:

if not exist "c:\users\%username%\Documents" goto :nodatos

if not exist F:\%username%\Documents md f:\%username%\Documents

xcopy /D /S /Y /I /H "c:\users\%username%\Documents\*.*" "F:\%username%\Documents"

if errorlevel 5 echo.&echo Error de disco en la grabacion&goto :fin
if errorlevel 4 goto :fin
if errorlevel 2 echo.&echo No hay espacio suficiente en el disco&goto :fin
if errorlevel 1 echo.&echo No hay archivos a copiar&goto :fin
echo Respaldo terminado correctamente
goto :fin
:nodatos
goto :fin
:Error
:Fin
Pause

En este caso yo designo las unidades tanto origen como destino, pero me gustaría que pudiera ser mas fácil para el usuario solo escoger la unidad, ya que no siempre las unidades son las mismas

Respuesta
1

Creo que has intentado adaptar el bat que te facilité para tu otra consulta del pasado 5 de marzo. Antes de nada quiero aclararte algunas cosas:

1. La mejor forma de incluir el texto de un bat en una ventana de estas es hacerlo mediante el icono "<>" ("snippet") de la barra de herramientas de la página.

2. Las variables %1 y %2 del bat original hacían referencia al primer y segundo parámetro utilizados en la invocación o llamada al BAT. En general %n haría referencia al parámetro enésimo. No tengo muy claro que lo hayas entendido a juzgar por el texto del primer IF. Puedes pedirme aclaración de cualquier cosa si no tienes muy claro para que sirve o como funciona.

Si te he entendido bien quieres utilizar otra forma de pasarle parámetros al bat, una forma, digamos, interactiva. Mira a ver si esto se ajusta a lo que quieres:

@echo off
set /p usu=Usuario del que se quiere hacer el backup:
set /p unidad=Unidad sobre la que se quiere hacer el backup:
echo Haciendo Backup de usuario %usu% sobre unidad %unidad%:
if not exist "c:\users\%usu%\Documents" goto :nodatos
if not exist %unidad%:\%usu%\Documents md %unidad%:\%usu%\Documents
xcopy /D /S /Y /I /H "c:\users\%usu%\Documents\*.*" "%unidad%:\%usu%\Documents"
if errorlevel 5 echo.&echo Error de disco en la grabacion&goto :fin
if errorlevel 4 goto :fin
if errorlevel 2 echo.&echo No hay espacio suficiente en el disco&goto :fin
if errorlevel 1 echo.&echo No hay archivos a copiar&goto :fin
echo Backup terminado correctamente
goto :fin
:nodatos
echo No hay documentos del usuario %usu% en la carpeta c:\users\%usu%\Documents. Revisar
:Fin
Pause

Prueba y dime lo que se te ocurra.

¡Gracias! Funciona perfecto

Acabo de darme cuenta de que no había leído bien tu pregunta. Interpreté que querías que el BAT preguntara por el usuario y la unidad de destino y acabo de ver que no era eso, que el usuario se asumía que era "activo" y que lo que tenía que hacer era preguntar por la unidad de origen y la unidad de destino. Lo cierto es que ahora, que creo que he entendido la pregunta no acabo de entender bien lo que se pretende. Porque parece que la unidad origen (o más bien la carpeta origen) es siempre "c:\users\%username%\Documents", de modo que no entiendo bien esa parte.

No, más bien era para crear un .bat para hacer el respaldo en un disco externo y después pasarlo a otra máquina, el asunto es que  no siempre es C donde debemos pasar el respaldo ya creado, entonces ocupaba que tanto origen como destino pudieran ser variables. Pero al darme el comando para crear la variable de destino solo tuve que hacer lo mismo para origen. Y funcionó muy bien

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas