PDA

View Full Version : batch per creare cartelle


Masamune
25-11-2003, 14:47
beh... la cosa non è poi così semplice come il titolo suggerisce quindi finitela di sghignazzare! ;)
quello che mi servirebbe è un batch che mi crea una cartella che ha per nome la data odierna. il comando md è scontato, ma come faccio ad impostare il valore della data???
credo che basti creare una variabile %data% e infilarci la data e poi fare md %data%.
qualcuno puo aiutarmi per favore???
grazie tante.

Sephiroth83
25-11-2003, 21:54
Ehi bel nick! Mi ricorda qualcosa... :)

Per il tuo problema, non so se sia facilmente risolvibile col batch, non è molto flessibile. Io avevo un problema simile (automatizzare un backup) e avevo realizzato un programmino in C che inserisse da solo la data nei nomi dei files. Se mi dai un attimo lo cerco e magari lo allego...

Sephiroth83
25-11-2003, 23:22
Ecco un programmino che riceve una stringa in input e esegue la stringa sostituendo i formati con la data. Ecco il codice:


// QUESTO PROGRAMMA ACCETTA UNA STRINGA IN INGRESSO E LA ESEGUE
// METTENDO AL POSTO DI !Y L'ANNO, !m IL MESE, !d IL GIORNO
// PER ALTRI FORMATI FARE RIFERIMENTO AL MANUALE DI C.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#define BUFFER 1024


int sostituisci(char *stringa, int n, char cerca, char rimpiazza)
{
int i, k = 0;

for(i = 0; stringa[i] != '\0' && i < n; i++)
if(stringa[i] == cerca) {
stringa[i] = rimpiazza;
k++;
}

return k;
}


int main(void)
{
time_t ora, *p_ora;
struct tm data;
FILE *stream_in = stdin, *stream_out = stdout;
char str_in[256], str_out[256], *punt;
int len;

/* CONTROLLA CHE LA PRIMA RIGA VENGA LETTA INTERAMENTE */
if( (fgets(str_in, BUFFER, stream_in) != NULL) &&
( (len = strlen(str_in)) == 0 || str_in[len - 1] != '\n') ) {
printf("Errore durante lettura input: probabile perdita di informazioni.");
printf("La lunghezza massima della prima riga e' 255, le righe successive vengono scartate.\n");
return 5;
}

sostituisci(str_in, BUFFER, '!', '%');

/* LEGGE L'ORA */
if((ora = time(p_ora)) == NULL) {
printf("Errore durante la lettura dell'ora.\n");
return 10;
}

data = *localtime(&ora);

punt = str_out;

strftime(punt, 256, str_in, &data);
fprintf(stream_out, "%s\n", str_out);

system(str_out);

return EXIT_SUCCESS;
}



Se non hai un compilatore C ti metto l'eseguibile.
Immaginiamo che il programma compilato si chiami "data.exe"

Il comando bat (DOS) per creare la cartella è:
echo md !Y-!m-!d|data

questo crea la cartella con la data nel formato giapponese (2003-11-26 che è comodo quando devi ordinare le cartelle per data).
Se vuoi la data nel formato europeo il comando è:
echo md !d-!m-!Y|data

Ovviamente devi avere il programma nella stessa cartella (a meno che tu non inserisca il percorso del programma nella variabile di sistema %PATH%).
Il tutto comunque dovrebbe funzionare. Se ti da problemi fammi sapere.