file batch

indios87

Nuovo Utente
Ciao a tutti!
avrei bisogno di una mano per la corretta compilazione di un file .batch.
L'obiettivo dell'attività è molto semplice: settimanalmente copiare una cartella da un path di origine ad uno di destinazione.
Nello spiecifico la cartella è nominata con il mese_giorno (ad esempio 05_ 06) e per questo vorrei creare
una macrovariabile che si valorizza automaticamente con la data odierna per poi spostare il contenuto della cartella da A --> B.

Vorrei capire (visto che sono neofita a dir poco):
1) come creare la macrovar per la data (in modo da non dover cambiare ogni settimana la data a mano)
2) come copiare l'intera cartella ed il suo contenuto (sono tutti file .csv) da A --> B.

Di seguito quello che ho provato a fare autonomamente (scopiazzando qui e lì) ma con scarso risultato.
L'errore che mi viene su cmd è che non trova il percorso

set newdate=%date:~-4%.%date:~3,2%.%date:~0,2%

:: yesterday date
@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%" ::yyyy year variable
set "MM=%result:~4,2%" ::mm month variable
set "DD=%result:~6,2%" ::dd day variable
set "datetimef=%yyyy%.%mm%.%dd%" ::create a new variable year.month.day
set "mesegiorno=%mm%_%dd%" ::create a new variable year.month.day

echo %mesegiorno%

copy "C:\Users\Luca\Desktop\serie a\%mesegiorno%" "C:\Users\Luca\Desktop\serie a\prova"


Non capisco dove sbaglio
Potete aiutarmi?
Grazie Mille
Luca
 

Federico83

UTENTE LEGGENDARIO
Utente Èlite
35,158
6,164
Hardware Utente
CPU
Intel 3570k @4.200
Scheda Madre
AsRock Z77 Extreme4
Hard Disk
4.5TB + 7 di NAS lol
RAM
16 GB G.Skill 2133
Scheda Video
AMD R9 290 TRI-X
Monitor
IIyama 28" 4K
Alimentatore
Cooler Master GX 650
Case
Corsair 600T
Sistema Operativo
Windows10x64pro
]
Codice:
set newdate=%date:~-4%.%date:~3,2%.%date:~0,2%

:: yesterday date
@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%" ::yyyy year variable
set "MM=%result:~4,2%" ::mm month variable
set "DD=%result:~6,2%" ::dd day variable
set "datetimef=%yyyy%.%mm%.%dd%" ::create a new variable year.month.day
set "mesegiorno=%mm%_%dd%" ::create a new variable year.month.day

echo %mesegiorno%
copy "C:\Users\Luca\Desktop\serie a\%mesegiorno%" "C:\Users\Luca\Desktop\serie a\prova"
mettiamolo così magari è pìù leggibile quindi devi copiare i dati più vecchi di una settimana?
gli script vbs sono presenti nella cartella temp? xkè poi li rimuovi con del?

prova questo sw https://freefilesync.org/
 

indios87

Nuovo Utente
ciao federico,
cerco di spiegarmi meglio:
ho un'attività con cadenza settimanale, alla file dell'attività devo spostare i file prodotti (in data odierna e non della settimana precedente)
da una cartella ad un'altra.
La prima parte l'ho un pò scopiazzata dal web quindi non saprei risponderti.
Vorrei capire :
1) come creare una macrovar per identificare il mese e il giorno in cui l'attività viene fatta (visto che la cartella è nominata con "MM_GG" (05_07 as esempio)
") come spostare la cartella utilizzando la macro var di cui sopra per spostare tutto da un path A ad un path B
purtroppo non posso scaricare altri programmi per via di imposizioni aziendali quindi dovrei farlo utilizzando un file .batch
Grazie ancora
 

Federico83

UTENTE LEGGENDARIO
Utente Èlite
35,158
6,164
Hardware Utente
CPU
Intel 3570k @4.200
Scheda Madre
AsRock Z77 Extreme4
Hard Disk
4.5TB + 7 di NAS lol
RAM
16 GB G.Skill 2133
Scheda Video
AMD R9 290 TRI-X
Monitor
IIyama 28" 4K
Alimentatore
Cooler Master GX 650
Case
Corsair 600T
Sistema Operativo
Windows10x64pro
forse dovresti abbandonare e passare a powershell che è cmq compreso in windows...
Codice:
$SourceDir = "SourceDir"
$DestinationDir = "DestDir"
$dir = dir $SourceDir | ?{$_.PSISContainer}

$dir | ? {$_.Name -match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'} | % {
    $source = $SourceDir +$_
    Move-Item $source $DestinationDir
    }
tipo così dove
* SourceDir = "C:\Users\Luca\Desktop\serie a\"
e DestinationDir= "C:\Users\Luca\Desktop\serie a\prova"
 
  • Mi piace
Reactions: indios87

indios87

Nuovo Utente
grazie mille Federico
proverò subito la tua soluzione!
Ti faccio sapere
forse dovresti abbandonare e passare a powershell che è cmq compreso in windows...
Codice:
$SourceDir = "SourceDir"
$DestinationDir = "DestDir"
$dir = dir $SourceDir | ?{$_.PSISContainer}

$dir | ? {$_.Name -match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'} | % {
    $source = $SourceDir +$_
    Move-Item $source $DestinationDir
    }
tipo così dove
* SourceDir = "C:\Users\Luca\Desktop\serie a\"
e DestinationDir= "C:\Users\Luca\Desktop\serie a\prova"
 

Federico83

UTENTE LEGGENDARIO
Utente Èlite
35,158
6,164
Hardware Utente
CPU
Intel 3570k @4.200
Scheda Madre
AsRock Z77 Extreme4
Hard Disk
4.5TB + 7 di NAS lol
RAM
16 GB G.Skill 2133
Scheda Video
AMD R9 290 TRI-X
Monitor
IIyama 28" 4K
Alimentatore
Cooler Master GX 650
Case
Corsair 600T
Sistema Operativo
Windows10x64pro

Entra

oppure Accedi utilizzando