Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 

Gli amministratori di rete che hanno dimestichezza con i batch file si saranno sicuramentre trovati nella condizione di salvare un file con la data e l'ora prima di cancellarlo. Ma come si puo' creare un file prendendo la data del giorno o semplicemente utilizzando dalla data ultima modifica del file?

 Windows mette a disposizione la possibilità di estrarre dalla data e dall'ora corrente parte di stringa. vediamo come.

 Il seguente esempio inizia con una echo per visualizzare l'intera data, la seconda riga memorizza nella variabile dd i primi due caratteri della stringa data ottenendo il giorno.

La seconda riga estrae il mese così via.

L'ultima riga visualizza la variabile filename che potremmo utilizzare per rinominare o copiare un file.

Ad esempio ren install.log %filename%.log

echo %date%
set dd=%date:~0,2%
set mm=%date:~3,2%
set yyyy=%date:~6,4%
echo %time%
set hh=%time:~0,2%
set hh=%hh: =0%
set mm=%time:~3,2%
set ss=%time:~6,2%
set filename=%yyyy%-%mm%-%dd%_%hh%-%mm%-%ss%
echo %filename%

  

NOTES

REM How to remove blank when hour is less than of 10 
REM 1) replacing blank with Zero
set hh=%hh: =0%
REM 2) or just testing the substring if it's blank
IF "%hh:~0,1%" == " " SET hh=0%hh:~1,1%

  

In alternativa si potrebbe provare a leggere la data ultima modifica del file...l'esempio seguente rilascia la data del file e la memorizza in fileDate 

FOR /f "tokens=1,2* delims= " %%a in ('dir myfilename.log^|find /i " myfilename.log"') DO SET fileDate=%%a 
echo here the that of the file: %fileDate

 

Last Updated: 7 agosto 2018

Oggi ho testato 14 metodi per ottenere una stringa data e ora da utilizzare come parte del nome del file. I metodi esposti non sono "regional compliant". Significa che se la data non è nel formato gg/mm/aaaa non funzionano.

Finalmente ho trovato un modo che ho adattato e modificato e che volentieri aggiungo a quest'articolo al fine di condividerlo.

Il file sembra grande, ma tolti i commenti abbiamo 7 righe di codice compreso l'echo off. I commenti iniziano con "due punti due punti"  :: , di solito si usa REM.

Nei commenti ci sono un bel pò di informazioni su come utilizzarlo. Aggiungo soltanto che viene creato un file vbs nella temp e che non cancello volutamente, utile per vedere meglio com'è fatto. Togliete il commento :: dall'ultima riga e il file verrà cancellato.

 

@echo off
:: [GOAL]
:: Create the Enviroment Variable FileNameDateTime
::
:: [FEATURES]
:: - 14# - ANOTHER WAY - Current Date Time
:: - 14# is the title of scripts tested, it means I tested 14 scripts and
::  this is my favorite way to create a datetime for file name.
:: - Regional independent solution generating the ISO date format	
:: - Use a temp vbs autogenerated to create a Datetime Regional Indeipendent
::
:: [RETURN]
:: Return something like this 2018-08-07_17-36-56
:: The value will be stored in the var FileNameDateTime
::
:: [HOW TO USE]
:: From another batch just make a call and use the var
::  @echo off
::  call SetFileNameDateTime.cmd
::  echo %FileNameDateTime%
::
:: [REFERENCES]
:: https://www.dostips.com/DtTutoFunctions.php#FunctionTutorial.CreatingAFunction
:: https://ss64.com/nt/syntax-getdate.html
:: 
:: [CREDIT]
::      https://ss64.com/nt/syntax-getdate.html
::      byman - Some changes by myself
::
:: Create the ~getCurrentDateTime.vbs
ECHO Dim dt > %TEMP%\~getCurrentDateTime.vbs
ECHO dt=now  >> %TEMP%\~getCurrentDateTime.vbs
ECHO 'output format: yyyymmddHHnn  >> %TEMP%\~getCurrentDateTime.vbs
ECHO wscript.echo (  (year(dt)*10000000000) + (month(dt)*100000000) + (day(dt)*1000000) + (hour(dt)*10000) + (minute(dt)*100) + (second(dt)*1) )   >> %TEMP%\~getCurrentDateTime.vbs

:: Run ~getCurrentDateTime.vbs and read output
For /f %%G in ('cscript /nologo %TEMP%\~getCurrentDateTime.vbs') do set _dtm=%%G
:: Date Time without any format: 201808071623
:: Set _yyyy=%_dtm:~0,4%& Set _mm=%_dtm:~4,2%& Set _dd=%_dtm:~6,2%& Set _hh=%_dtm:~8,2%& Set _nn=%_dtm:~10,2%
::
set FileNameDateTime=%_dtm:~0,4%-%_dtm:~4,2%-%_dtm:~6,2%_%_dtm:~8,2%-%_dtm:~10,2%-%_dtm:~12,2%
:: echo fileNameDateTime=%fileNameDateTime%
:: echo Date Time without any format: %_dtm%
:: del %TEMP%\~getCurrentDateTime.vbs

 

 

 

 

 - have fun - 

 

REFERENCES

DISQUS - Leave your comments here