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
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
#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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.