file batch

indios87

Nuovo Utente
3
0
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,407
6,323
CPU
Ryzen 7 3700X
Dissipatore
NDH15
Scheda Madre
Gigabyte auros X570 elite
HDD
4.5TB + 15 di NAS lol
RAM
16 GB G.Skill 3200
GPU
RTX2070
Monitor
IIyama 28" 4K
PSU
Cooler Master GX 650
Case
REV200
OS
Windows11x64pro
]
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
3
0
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,407
6,323
CPU
Ryzen 7 3700X
Dissipatore
NDH15
Scheda Madre
Gigabyte auros X570 elite
HDD
4.5TB + 15 di NAS lol
RAM
16 GB G.Skill 3200
GPU
RTX2070
Monitor
IIyama 28" 4K
PSU
Cooler Master GX 650
Case
REV200
OS
Windows11x64pro
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
Reazioni: indios87

indios87

Nuovo Utente
3
0
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,407
6,323
CPU
Ryzen 7 3700X
Dissipatore
NDH15
Scheda Madre
Gigabyte auros X570 elite
HDD
4.5TB + 15 di NAS lol
RAM
16 GB G.Skill 3200
GPU
RTX2070
Monitor
IIyama 28" 4K
PSU
Cooler Master GX 650
Case
REV200
OS
Windows11x64pro

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!