PDA

View Full Version : [dos] creare un bat per backup


lulup
10-09-2008, 12:33
salve :)

vorrei creare un .bat che mi copi i .sav dalla microsd ad una cartella sul desktop così : Desktop\Backup sav\10-09-08 e possibilmente anche un txt con tutti i file nella microsd

ho già provato a creare qualcosa ma con scarsi risultati:doh: potreste aiutarmi ?

PS:non sapevo dove postare questa discussione, qui va bene ?

Oceans11
10-09-2008, 15:07
i file bat non sono ne più ne meno che comandi dati a rotta di collo...quindi se sai copiare i file da console, usi lo stesso comando nel file bat e sei a posto :D

per esempio:


copy d:\*.sav c:\programmi\backup\
copy d:\*.txt c:\programmi\backup\

Abadir_82
10-09-2008, 15:07
più o meno così:

--------
CD\
X: (dove x è l'unità della microSD)
copy *.sav "C:\documents and settings\utente\desktop\nome cartella"
-------

Però ti conviene farti un programmino in C... fai prima.

lulup
10-09-2008, 15:31
avevo optato per il bat perché il c non lo conosco per niente

comunque per i vostri consiglio vanno bene soltanto che dovrei andare a modificare ogni volta mettendo un nome alla cartella diverso non c'è un modo per farlo automaticamente ? mettendo %date% le / le considera come un'altra cartella :doh:

Oceans11
10-09-2008, 16:11
copy d:\*.sav c:\programmi\backup\%date /T%\"


così a me funge

Abadir_82
10-09-2008, 16:31
avevo optato per il bat perché il c non lo conosco per niente

comunque per i vostri consiglio vanno bene soltanto che dovrei andare a modificare ogni volta mettendo un nome alla cartella diverso non c'è un modo per farlo automaticamente ? mettendo %date% le / le considera come un'altra cartella :doh:

Se qualche tuo amico conosce il C puoi usare questo codice:


#include "header.h"


extern "C" __declspec(dllexport)int run(char *directory)
{
struct tm *actual_date_time;
long ltime=0L;
int old_time=0;
int i, dir_lenght, slash_position, last_dot, mutsig_lenght, backup_lenght;
char dir[max_file_lenght];
char date_time[25];
char temp_char[20];
char original_project_path[max_file_lenght]={"\\\\?\\"}; // http://msdn2.microsoft.com/en-us/library/aa363855(VS.85).aspx
char project_name[max_file_lenght];
char backup_project_path[max_file_lenght]={"\\\\?\\"}; // http://msdn2.microsoft.com/en-us/library/aa363855(VS.85).aspx;
char mutsig_folder_path[max_file_lenght];
char folder_name[25]={"mutsig"};
char backup_folder_path[max_file_lenght]={"\\\\?\\"}; // http://msdn2.microsoft.com/en-us/library/aa363855(VS.85).aspx
char Xcopy[max_file_lenght]={"Xcopy.exe "};
char mutsig_dos[max_file_lenght];
char backup_dos[max_file_lenght];
char process_done[max_file_lenght]={" PLEASE WAIT, FILES ARE BEING COPIED... "};
char src[max_file_lenght];
char dst[max_file_lenght];
HWND Handle;


strcpy(dir, directory);
// Calculate actual date and local time.
time(&ltime);
actual_date_time=localtime(&ltime);

// Create the name of the backup folder.
sprintf(date_time, "%d", actual_date_time->tm_year+1900);
if ((actual_date_time->tm_mon+1)<10)
{
strcat(date_time, "0");
}
sprintf(temp_char, "%d", (actual_date_time->tm_mon+1));
strcat(date_time, temp_char);
if ((actual_date_time->tm_mday)<10)
{
strcat(date_time, "0");
}
sprintf(temp_char, "%d", actual_date_time->tm_mday);
strcat(date_time, temp_char);
strcat(date_time, "_");
if ((actual_date_time->tm_hour)<10)
{
strcat(date_time, "0");
}
sprintf(temp_char, "%d", actual_date_time->tm_hour);
strcat(date_time, temp_char);
strcat(date_time, "-");
if ((actual_date_time->tm_min)<10)
{
strcat(date_time, "0");
}
sprintf(temp_char, "%d", actual_date_time->tm_min);
strcat(date_time, temp_char);
strcat(date_time, "-");
if ((actual_date_time->tm_sec)<10)
{
strcat(date_time, "0");
}
sprintf(temp_char, "%d", actual_date_time->tm_sec);
strcat(date_time, temp_char);
strcat(folder_name, date_time);

// Find the path of the backup and mutsig folders.
dir_lenght=strlen(dir);
for(i=0; i<=dir_lenght; i++)
{
if(dir[i]=='\\')
{
slash_position=i;
}
}
for(i=0+4; i<slash_position+4; i++)
{
backup_folder_path[i]=dir[i-4];
}
backup_folder_path[i]='\0';
sprintf(mutsig_folder_path, "%s", backup_folder_path);
strcat(mutsig_folder_path, "\\Mutsig\\*.*");
strcat(backup_folder_path, "\\Backup\\");

// Copy the project file in the backup folder with the standard backup name.
for(i=0; i<(dir_lenght-slash_position); i++)
{
project_name[i]=dir[i+slash_position+1];
}
last_dot=0;
for(i=0; i<=(dir_lenght-slash_position); i++)
{
if((project_name[dir_lenght-slash_position-i]=='.')&&(last_dot==0))
{
project_name[dir_lenght-slash_position-i]='\0';
last_dot=1;
}
}
strcat(project_name, "_");
strcat(project_name, date_time);
strcat(project_name, ".apr");
sprintf(backup_project_path, "%s", backup_folder_path);
strcat(backup_project_path, project_name);
strcat(original_project_path, dir);
CopyFile(original_project_path, backup_project_path, TRUE);

// Create the backup folder in the backup dir.
strcat(backup_folder_path, folder_name);
CreateDirectory(backup_folder_path, NULL);

// Copy the files from the mutsig to the backup dir. Create the SHFILEOPSTRUCT and zero it.
strcat(mutsig_folder_path, "\0");
strcat(backup_folder_path, "\0");
memset(src, 0, sizeof(mutsig_folder_path));
memset(dst, 0, sizeof(backup_folder_path));
strcpy(src, mutsig_folder_path);
strcpy(dst, backup_folder_path);
SHFILEOPSTRUCT fos; // http://msdn2.microsoft.com/en-us/library/bb759795(VS.85).aspx
memset(&fos, 0, sizeof(fos));
// Set hwnd to the Handle property to make the application the owner of the progress dialog.
fos.hwnd = Handle;
// Specify a copy operation.
fos.wFunc = FO_COPY;
// Set the from and to parameters.
fos.pFrom = src;
fos.pTo = dst;
// Set the flags.
fos.fFlags = FOF_ALLOWUNDO|FOF_NOCONFIRMMKDIR|FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS|FOF_RENAMEONCOLLISION;
fos.lpszProgressTitle = process_done;
// Do it.
SHFileOperation(&fos);

Header.h


#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <conio.h>
#include <ctime>
#include <ctype.h>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <malloc.h>
#include <sstream>
#include <string.h>
#include <vector>
#include <windows.h>
#include <winsock.h>
#define max_file_lenght 16384 // Maximum number of characters in the name of one file/path.
using namespace std;


// Function that will be exported to create the dll.
extern "C" __declspec(dllexport)int run(char *directory);

Oceans11
10-09-2008, 18:07
Però ti conviene farti un programmino in C... fai prima.

Le ultime parole famose.... :D

lulup
10-09-2008, 18:58
ma lol xD purtroppo non ho nessun amico che sa il C :mc:

Abadir_82
11-09-2008, 07:41
Le ultime parole famose.... :D

Dai, non è lunghissimo, è solo che dovevo estrarre la data e costruire il path in una maniera un po' particolare... cmq usando le API di windows hai più controllo sul tipo e sul modo di copia :D

Oceans11
11-09-2008, 10:29
[@Abadir_82]

Io sono per l'utilizzo dello strumento più adatto :)

Dico cioè, che siccome te la cavi egregiamente con una sola riga di bat, io userei quello. Poi è anche logico che in C hai più controllo sul tipo e sul modo (come dici tu) e anche su un quadriliardo di altre cose :D

Cmq penso che il tuo suggerimento sia stato quantomeno didattico!!! (anche per me :rolleyes: )

Abadir_82
11-09-2008, 10:53
[@Abadir_82]

Io sono per l'utilizzo dello strumento più adatto :)

Dico cioè, che siccome te la cavi egregiamente con una sola riga di bat, io userei quello. Poi è anche logico che in C hai più controllo sul tipo e sul modo (come dici tu) e anche su un quadriliardo di altre cose :D

Cmq penso che il tuo suggerimento sia stato quantomeno didattico!!! (anche per me :rolleyes: )

Ammetto che per quanto abbia usato DOS non avrei saputo costruire la cartella con la data attuale... quel %T proprio non lo conoscevo.

Sono felice che il software sia utile a qualcuno :)