Batch zile lucratoare

Discutii despre orice are macar putina legatura cu domeniul IT
Închis
halfbebi
Mesaje: 154
Membru din: Mar Ian 26, 2010 10:25 am

Batch zile lucratoare

Mesaj de halfbebi » Vin Oct 07, 2016 10:48 am

Buna ziua,
am cautat dar nu am reusit sa fac sa mearga un batch care sa ruleze un program doar in zilele lucratoare sau "specificate" sau "mai putin in zilele de ..." . Va rog sa ma ajutati.
Multumesc anticipat, stima
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Batch zile lucratoare

Mesaj de Dr.Windows » Mar Dec 13, 2016 6:17 pm

Chiar daca raspunsul vine mai tarziu... poate mai este (inca) de folos.
Din pacate pentru a detecta ziua din saptamana nu se poate folosi doar o comanda MS DOS, dar se poate, asa cum am vazut defapt si in scripturile tale, apela un script VBS care poate "pune" informatia intr-un fisier text ce poate apoi fi "citit" din MS DOS.
Astfel poti pune intr-o variabila din acel script numele zilei pe care apoi il poti compara asa cum am vazut ca stii sa faci cu IF.

Concret, se poate se poate folosi urmatorul script VBS pentru detectarea numelui zilei (am si atasat fisierul GETDoW.vbs)

Cod: Selectaţi tot

'How Can I Determine the Day of the Week?
'http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug04/hey0827.mspx

Dim objArgs
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
 MsgBox "This script needs a parameter!", vbExclamation, AppTitle
 WScript.Quit
End If
filename = objArgs(0)

dtmToday = Date()
dtmDayOfWeek = DatePart("w", dtmToday)

Select Case dtmDayOfWeek
    Case 1 lcDayName =  "Duminica"
    Case 2 lcDayName =  "Luni"
    Case 3 lcDayName =  "Marti"
    Case 4 lcDayName =  "Miercuri"
    Case 5 lcDayName =  "Joi"
    Case 6 lcDayName =  "Vineri"
    Case 7 lcDayName =  "Sambata"
End Select

'wscript.echo "Astazi este: " + lcDayName

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.CreateTextFile(filename)
oFile.WriteLine "Astazi este:" + lcDayName +";"
oFile.close
Fisierul de mai sus ruleaza numai daca este apelat cu un parametru reprezentand numele fisierului de tip TEXT pe care il va crea.

Apoi in interiorul fisierului BAT se poate "citi" numele zilei scris in fisierul text si apoi in functie de numele zile se poate "sari" in asa fel incat sa se execute ce trebuie:

Cod: Selectaţi tot

@echo off

rem *** Setari parametrii fisier BAT
set BATFullPath=%~dp0
set BATTempFile=%BATFullPath%%~n0.tmp
set BATLogFile=%BATFullPath%%~n0.log
set BATLogTag=%DayName%_%AMBLVer%


rem *** Detecteaza numele zilei
call %BATFullPath%GETDoW.vbs %BATTempFile%

for /F "eol=;  tokens=1,2 delims=:;" %%c in (%BATTempFile%) do (
	rem Echo Astazi este: %%d
	if [%%c]==[Astazi este] (
		set DayName=%%d
		)
)

goto %DayName%

:Duminica
echo D
goto Final

:Luni
echo L
goto Final

:Marti
echo Ma
goto Final

:Miercuri
echo Mi
goto Final

:Joi
echo J
goto Final

:Vineri
echo V
goto Final

:Sambata
echo S
goto Final

:Final
rem *** Curatenie la locul de munca
if exist %BATTempFile% (
	del %BATTempFile% > nul
)
In exemplul de mai sus nu se executa decat o singura intructiune de afisare a initialei zilei.

Sper sa fie de folos.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Închis

Înapoi la “Discutii libere (Cafenea)”