PDA

View Full Version : copy DOS


memphis raines
29-12-2003, 12:00
Ciao a tutti,

ho la necessita di eseguire un batch sotto DOS che copi o rinomini un file inserendo l'ora dell'operazione nel nome del file.
Ho provato in diversi modi ma non ci sono riuscito.

Riuscite a darmi qualche dritta.

Grazie.

Memphis

maxithron
29-12-2003, 12:51
andando di memoria dovrebbe essere qualcosa tipo:


ECHO. |TIME > TIME
COPY LOG +TIME

rem qui inserisci l'altra parte di codice per la copia ad esempio:

copy c:\documenti\*.txt \personale\testi


non sono sicuro della mia memoria però...

memphis raines
29-12-2003, 14:00
Scusa ma a me serve che il file una volta copiato abbia come nome il nome originale piu' la data dell'operazione.

Es. file originale: pippo.txt f
fiel rinominato : pippo29122003.txt

Questo mi serve per evitare che il file originale mi venga sovrascritto da quello del giorno dopo che si chiama sempre nello stesso modo.

monkey72
29-12-2003, 19:51
con la data non è semplice xchè il comando che ti restituisce la data di sistema cioè "date /T" restituisce la data nel formato gg/mm/aaaa e questo tu non potrai accodarlo al nome del file xchè contiene i caratteri "/" non permessi per nominare un file... non so se si possa cambiare il formato data...

monkey72
29-12-2003, 20:36
:doh: ma il formato della data di sistema si può anche cambiare e scegliere come separatore ad esempio il "." dalle opzioni internazionali del pannello di controllo
in questo caso il comando dos di cui hai bisogno è:

ren pippo.txt pippo"%date%".txt

cionci
30-12-2003, 00:33
Se ti interessa ho fatto questo piccolo programmino per un mio amico che aveva il tuo stesso problema...

Se a qualcuno interessa posso anche postare il codice C...

memphis raines
30-12-2003, 09:31
Grazie mille a monkey72. Funziona perfettamente.

Cionci puoi mandarmi il codice sorgente? Non sono un genio in C ma qualcosa mi ricordo dai tempi della scuola:)


Grazie

cionci
30-12-2003, 09:41
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char *argv[])
{
char *ext, *nuovo, *vecchio;
struct tm *newtime;
time_t clock;

if(argc != 2)
{
fprintf(stderr, "Nome del file mancante\n");
exit(2);
}

vecchio = (char *)malloc(sizeof(char)*strlen(argv[1]));
strcpy(vecchio, argv[1]);
strtok(argv[1], ".");
ext = strtok(NULL, ".");

nuovo = (char *)malloc(sizeof(char)*(strlen(argv[1])+((ext)?strlen(ext):0)+10));
time(&clock);
newtime = localtime(&clock);
sprintf(nuovo, "%s%d%02d%02d%s%s", argv[1],
newtime->tm_year+1900, newtime->tm_mon+1,
newtime->tm_mday, (ext)?".":"", (ext)?ext:"");
printf("%s->%s\n", vecchio, nuovo);
if(rename(vecchio, nuovo))
{
fprintf(stderr, "Impossibile rinominare il file\n");
exit(1);
}
else
printf("Il file '%s' e' stato rinominato come '%s'\n", vecchio, nuovo);
return 0;
}

Ah...mi ero scordato di dirte che basta passargli il nome del file da rinominare con o senza estensione e te lo rinomina come:
nomeAAAAMMGG.ext

Lo rinominai usando il formato AAAAMMGG perchè in questo modo ordinandoli epr nome del file si ha un ordine completo dei file...

memphis raines
30-12-2003, 09:59
Grazie Cionci.

Ora inserisco la chimata all'exe nella procedura di connnessione ftp, scarico e ridenominazione del file cosi' faccio un bel giro completo.