none
File batch: come ottenere questo formato di data "2019-12-02" (oggi - 2gg) basandosi sulla data di oggi? RRS feed

  • Domanda

  • Ciao, ogni giorno, poco prima di eseguire un backup su disco esterno, ho schedulato la creazione di un file di testo vuoto, che include la data odierna in questo formato, sul mio disco di rete E:\...

    00_doc_test_backup_2019-12-02-su-SERVER-questo-DEVE-esserci.txt

    subito dopo eseguo il backup copiando i vari file su E:\ con anche il txt sul disco esterno T:\...

    Questo mi permette di verificare rapidamente e visivamente se in T:\ è stato eseguito il backup correttamente.

    Quello che vorrei fare ora è eliminare il file txt di 2 giorni fà (tenendo quello di ieri e oggi)

    Vorrei quindi "costruire" il seguente comando:

    DEL T:\BACKUP_CF\Giornaliero\Posta\00_doc_test_backup_2019-12-02-su-SERVER-questo-DEVE-esserci.txt

    Ho provato con questo comando

    SET "ELIMINAMI=00_doc_test_backup_%YYYY:~1%-%MM:~1%-%DD%-su-SERVER-questo-DEVE-esserci.txt
    ECHO %ELIMINAMI%
    PAUSE

    ma echo mi restituisce 00_doc_test_backup_019-12-102-su-SERVER-questo-DEVE-esserci.txt

    :(

    DOVE SBAGLIO?

    E inoltre, dopo, per arrivare a 

    DEL T:\BACKUP_CF\Giornaliero\Posta\00_doc_test_backup_2019-12-02-su-SERVER-questo-DEVE-esserci.txt

    come dovrò fare?Forse come sotto?

    DEL T:\BACKUP_CF\Giornaliero\Posta\%ELIMINAMI

    Sapreste aiutarmi e spiegare dove sbaglio e come fare per risolvere?

    Grazie ^__^


    Grazie, Reggio

    mercoledì 4 dicembre 2019 19:22

Tutte le risposte

  • Sarebbe utile avere tutto il batch per trovare il problema (probabilmente %YYYY:~1% deve diventare %YYYY% unica cosa che vedo )

    non conoscendo le variabil YYYY MM e DD come possiamo aiutarti!

    In più ci sono degli apici dove non devono esserci 
    dei % in meno dove sono necessari
    non ci siamo!

    Se vuoi puoi usare questo batch DT.cmd che avevo fatto tanto tempo fa e che utilizzo

    @echo off
    :: dt.cmd
    ::set time and date variables
    :: TT, DD, DDTT , DDTTSS , secondi=SS, centesimi=CC
    :: giorno=_GG mese=_MM anno=_AA ore=_O minuti=_M
    :: DD=data rovesciata separata da _ 2004_12_31
    :: TT=ora separata da _ 10_15
    :: AMGOM=AnnoMeseGiornoOreMinuti es. AMGOM=200505090956
    :: Gastone Canali 2004
    :: 
    set  DD=
    set _GG=
    set _MM=
    set _AA=
    set  TT=
    set  _O=
    set  _M=
    set _CC=
    set _SS=
    set AMGOM=
    set AMG=
    
    SET "debug_OFF=REM "
    SET "debug_ON=echo "
    
    SET debug=%debug_on%
    
    %debug% %date% %time%
    
       ::04/12/2019  data rovesciata e separata da _ 2005_12_28
       for /f "Tokens=1-4 Delims=/ " %%i in ('echo %date%')       do (  
          set  DD=%%k_%%j_%%i
          set _GG=%%i
          set _MM=%%j
          set _AA=%%k
       )
    
       ::  21:25:45,14 ora separata da _ 13_50
       for /f "Tokens=1-4 Delims=: " %%i in ('echo %time%') do (
          set  TT=%%i_%%j
          set  _O=%%i
          set  _M=%%j
       )
    
       ::21:25:45,14 seconds
       for /F "Tokens=3 Delims=:" %%i in ('echo %time%') do (
           for /f "Tokens=1,2 Delims= " %%a in ('echo %%i') do (
              set _SS=%%a
    	  set _CC=%%b
           )
       )   
    
    :: data e ora
       set DDTT=%DD%-%TT%
       set DDTTSS=%DD%-%TT%_%_SS%
    ::
       set AMGOM=%_AA%%_MM%%_GG%%_O%%_M%
       set AMG=%_AA%%_MM%%_GG%
       
    
    ::debug
    %debug%  ora         =%TT%+
    %debug%  data        =%DD%+
    %debug%  secondi     =%_SS%+
    %debug%  centesimi   =%_CC%+
    %debug%  giorno      =%_GG%+
    %debug%  mese        =%_MM%+
    %debug%  anno        =%_AA%+
    %debug%  ore         =%_O%+
    %debug%  minuti      =%_M%+
    %debug%  AMGOM       =%AMGOM%+
    
    

    C:\Users\gas>call c:\admin\dt.cmd
    C:\Users\gas>set eliminani=00_doc_test_backup_%_AA%-%_MM%-%_GG%-su-SERVER-questo-DEVE-esserci.txt

    C:\Users\gas>echo %eliminani%
    00_doc_test_backup_2019-12-04-su-SERVER-questo-DEVE-esserci.txt

    C:\Users\gas>

    Ciao Gas

    Alternativa usare Powershell che gestisce meglio le date...


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere


    mercoledì 4 dicembre 2019 21:00
    Moderatore
  • Ciao, allora .... :)

    1) GRAZIE!

    2) Non sono esperto e fatico a capire il significato di tutti i tuoi comandi ...

    3) Il tuo risultato è QUASI perfetto per mè: io vorrei ottenere il nome file txt come hai fatto, ma che contenga la data di 2gg fà (non la data odierna) così da poter cancellare il file txt di 2gg fà

    Sapresti mostrarmi come modificare la tua per ottenere questo?

    4) Sotto ( solo per la cronanca ;-P )  ti mostro cosa avevo combinato io copiando "alla cieca" quà e là e incrociando i codici e facendo molte prove ... fatico a trovare un buon testo da studiare ...

    @ECHO OFF
    SetLocal EnableDelayedExpansion

    SET N=2

    SET i=100
    FOR %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do set /A "i+=1" & SET "dpm[!i!]=%%a"
    FOR /F "tokens=1-3 delims=/" %%a in ("%DATE%") do (
       SET /A "DD=1%%a-N, I=^!(((DD-101)>>31)+1), MM=1%%b-I, J=^!(MM-100), MM+=J*12"
       SET /A "YYYY=%%c-J, dpm[102]+=^!(YYYY%%4), DD+=I*dpm[!MM!]"
    )
    SET "newDate=%DD:~1%/%MM:~1%/%YYYY%

    rem SET "newDate=00_doc_test_backup_%YYYY:~1%-%MM:~1%-%DD%

    ECHO %newDate%
    PAUSE

    ECHO Adesso cancello il file %newDate%.txt
    PAUSE

    DEL 00_doc_test_backup_019-12-102.txt

    ECHO Adesso cancello il file su T:  ...ma come "calcolo" la data corretta da cancellare?
    PAUSE

    DEL T:\BACKUP_CF\Giornaliero\Posta\00_doc_test_backup_%newDate%-su-SERVER-questo-DEVE-esserci.txt

    ECHO FATTO! :)
    PAUSE

    rem appunti la crezione del file avviene così: 00_doc_test_backup_%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-su-SERVER-questo-DEVE-

    esserci.txt

    Grazie ancora ^__^


    Grazie, Reggio

    venerdì 6 dicembre 2019 20:08
  • mi era sfuggito il -2gg che complica notevolmente le cose

    C:\Users\gas>echo %date%
    06/12/2019
    C:\Users\gas>c:\admin\dt.cmd
    C:\Users\gas>set /a   _GG-=2
    4
    C:\Users\gas>set eliminani=00_doc_test_backup_%_AA%-%_MM%-%_GG%-su-SERVER-questo-DEVE-esserci.txt
    C:\Users\gas>echo %eliminani%
    00_doc_test_backup_2019-12-4-su-SERVER-questo-DEVE-esserci.txt

    ovviamente non funziona il primo e il secondo giorno del mese, si porebbe sistemare... ma consiglio di usare una riga di powershell

    powershell -command  {"00_doc_test_backup_{0:yyyy}-{0:MM}-{0:dd}-su-SERVER-questo-DEVE-esserci.txt"} -f (get-date).AddDays(-2)

    ecco come integrarlo con il vecchio dos

    @echo off
     for /f %%O in ('powershell -command  {"00_doc_test_backup_{0:yyyy}-{0:MM}-{0:dd}-su-SERVER-questo-DEVE-esserci.txt"} -f ^(get-date^).AddDays^(-2^)') do set eliminami=%%O
     echo 2 giorni fa:  %eliminami%
     for /f %%O in ('powershell -command  {"00_doc_test_backup_{0:yyyy}-{0:MM}-{0:dd}-su-SERVER-questo-DEVE-esserci.txt"} -f ^(get-date^).AddDays^(-12^)') do set eliminami=%%O
     echo 12 giorni fa: %eliminami%
    2 giorni fa:  00_doc_test_backup_2019-12-04-su-SERVER-questo-DEVE-esserci.txt
    12 giorni fa: 00_doc_test_backup_2019-11-24-su-SERVER-questo-DEVE-esserci.txt

    ciao Gastone


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere


    venerdì 6 dicembre 2019 21:46
    Moderatore
  • Ciao Gastone, che tu sappia ci sarebbe modo di usare numeri seriali in sequenza per le date?

    cito da excel: Per poter essere utilizzate nei calcoli, le date vengono memorizzate come numeri seriali in sequenza. Per impostazione predefinita, il 1° gennaio 1900 corrisponde al numero seriale 1 e il 1° gennaio 2008 corrisponde al numero seriale 39448, essendo trascorsi 39.447 giorni dal 1° gennaio 1900.

    Con un sistema simile, potrei risolvere il problema dei giorni 1 e 2 del mese ....

    PS: Sai suggerirmi un link per imparare i vari comandi dos/batch? Tu come hai imparato? :)


    Grazie, Reggio

    sabato 7 dicembre 2019 08:01
  • Ripeto, usa la riga di powershell che ti ho scritto, ci sono situazioni per cui i batch dos sono perfetti e altre dove sono vivamente sconsigliati!
    Fare una sottrazione fra date necessita una 30tina di righe di codice dos con powershell ne basta una.

    Da utilizzatore e automatizzatore di task sisteminstici, dedicati da subito a powershell (saper leggere un batch dos è importante, scriverlo meno, purchè tu lo sappia fare in poeweshell!)

    Advanced Date Math

    What would it take to do some real math with dates in batch files: add a couple of days, find out the weekday of 3 months ago, ...?

    It would require a way to "linearly" convert any date to a number and back again.

    Sounds too complicated?
    As a matter of fact, there already is a method to do that.
    The "number date" is called the Julian date: the interval of time in days and fractions of a day, since January 1, 4713 BC Greenwich noon (WikiPedia).
    The current Julian date would be approximately 2458826 (calculated by the webserver's PHP interpreter, then truncated to an integer value).

    Good news: someone has already written the conversion subroutines in NT batch!
    Thanks Ron Bakowski for the following code:

    https://www.robvanderwoude.com/datetimentmath.php

    ---

    Il sito sopra è forse la bibbia e Rob sicuramente una istituzione ()

    https://riptutorial.com/Download/batch-file.pdf
    https://www.dostips.com/
    http://www.didiermorandi.fr/vbscript/doc/Windows_Command_Line_Vic_Laurie.pdf

    ciao Gas



    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    domenica 8 dicembre 2019 21:23
    Moderatore