Batch file in windows XP


Salvare il direttorio corrente

for /f "usebackq" %%i in (`cd`) do set CURDIR=%%i
echo %CURDIR%

cicli FOR

il ciclo FOR supporta i nomi nella sintassi 8.3 a meno che ci sia un'istruzione "LFNFOR ON" che abilita il supporto dei nomi lunghi

FOR %%F IN ("c:\miodir\*.txt") DO ECHO.%%F


With LFNFOR ON, this ECHOes long forms of the TXT file names ("quote" path or name if it contains  Space s). Only the first file found will include the path c:\my src, however. For any further files found, only the bare name (not the folder) is returned.


FOR (IN DO, repeat command on files, or strings)

for %%f in (*.txt) do type %%f

per ogni file (non nascosto o di sistema) con estensione txt nel direttorio corrente eseguo il comando type" del file (visualizza)

for %%n in (uno due tre) do echo.%%n

per tutte le parole elencate esegue in comando echo quindi ha l'effetto di tre echo separati

for %%n in (uno due) do echo.%%n>>F.TXT

esegue due echo separati ridiretti sul file F.TXT quindi ha l'effetto di appendere (>>)due linee una per ogni parola

for %%s in ("one two three") do echo.%%s

"one two three" sono trattati come singola stringa quindi si comporta come il semplice echo

la metavariabile %%v può assumere qualsiasi carattere. Nei file batch viene usato il formato %% mentere nel modo immediato da linea di comando si usa il modo abbreviato %

LFNFOR

LFNFOR (uso del Long File Names con il comando FOR)

LFNFOR ON

SET

SET SRC=C:\BKTEST
assegna un valore alla variabile SRC

IF EXIST

C:>if exist *.bat dir /oen /b
miobat1.bat
miobat2.bat

elenca il contenuto del direttorio solo se ci sono dei bat

START /WAIT

start /wait switch ferma l'esecuzione di un bat fino a quando non è partito e terminato un programma grafico in GUI. Il comando START ritorna l'ERRORLEVEL al bat di partenza se il programma gui lo gestisce!.

esempio: start /wait programmaGUI.exe /switch Par1 Par2
esempio:
start /wait "C:\Program Files\ProgrammaGUI.exe" /switch Par1 Par2

ESEMPIO BAT DI GESTIONE DEI BACKUP

download script in formato txt  o scaricare esempi completi di un'applicazione

N.B. gmail.exe è un programma proprietario per l'invio di mail scritto da me

@rem Salvataggio Office per date
@rem aggiornato al 30/03/2016

@rem salva
@rem - d:\DATI\
@rem - d:\PRIVATI\
@rem - d:\MEDIAZIONE\

@Setlocal EnableDelayedExpansion

@rem by Andrea 30/3/2016
@rem ----------------------------------------------------------------------
@rem Partendo dalla data di sistema estrae le variabili DAY, MONTH ed YEAR
@rem calcola poi la settimana in cui mi trovo WOM range 1-5
@rem ed infine il giorno della settimana DOW range 1-7
@rem assegna anche EOM e EOW se sono alla fine della settimana e del mese
@rem ----------------------------------------------------------------------

@For /F "tokens=1,2,3 delims=/ " %%A in ('Date /t') do @(
   Set DAY=%%A
   Set MONTH=%%B
   Set YEAR=%%C
)

@rem %TM:~0,1% si legge come il primo carattere ovvero da OFFSET 0 per 1 Carattere
@rem è la correzione per eliminare lo 0 in testa alle date

@set TM=%MONTH%
@set TM=%TM:~0,1%
@if %TM% == 0 ( set /a NMONTH=%MONTH:~1,1% ) else ( set NMONTH=%MONTH%)

@set TM=%DAY%
@set TM=%TM:~0,1%
@if %TM% == 0 ( set /a NDAY=%DAY:~1,1% ) else ( set NDAY=%DAY%)

@Set /a  WEEK = ( NDAY - 1 ) / 7
@Set /a  DOW = %NDAY% - ( %WEEK% * 7 )

@rem --- controlla fine mese e fine settimana
@set EOW=0
@set EOM=0
@if %DOW% == 7 ( Set EOW = %WEEK%)
@for %%A in (11 4 6 9)        do @if %NMONTH% == %%A ( if %NDAY% == 31 ( set EOM=%NMONTH%) )
@for %%A in (1 3 5 7 8 10 12) do @if %NMONTH% == %%A ( if %NDAY% == 30 ( set EOM=%NMONTH%) )
@for %%A in (2)               do @if %NMONTH% == %%A ( if %NDAY% == 28 ( set EOM=%NMONTH%) )

@echo DAY(%DAY%) MONTH(%MONTH%) WEEK(%WEEK%)  DOW(%DOW%)  End Of Month EOM(%EOM%)  End Of Week EOW(%EOW%)
@rem ----------------------------------------------------------------------

@set SRC=\\192.168.200.2
@set TRG=\\192.168.200.3\Zip
@set PRG=\\127.0.0.1\Manutenzione\AggiornaPL\7z.exe
@set LOG7Z=\\192.168.200.3\Zip\Log\log-7z.txt
@set LOGFILE=\\192.168.200.3\Zip\Log\log.txt
@set LOGMAIL=\\192.168.200.3\Zip\Log\log-mail.txt
@set TOEML="<andrea.sommaruga@gmail.com>"
@set BODY=Vedi Log allegato:%LOG7Z%
@set SUBJECT=ColGeoMB_Backup_Giornalieri_QNAP-zip

@echo %DATA% >%LOG7Z%

@del smtp-??.log

@call :ZIPPONE PRIVATI
@call :ZIPPONE MEDIAZIONE
@call :ZIPPONE DATI

@if !ERRORE!A == A (   @set MSG=OK: ) else ( @set MSG=!ERRORE! )
@echo %MSG% %DATA% >>%LOGFILE%
gmail.exe %TOEML% "%MSG% %SUBJECT%"  "%BODY%"  "%LOG7Z%" >> %LOGMAIL%

@goto FINE

:ZIPPONE
    @set BKUPSRC=%SRC%\%1\*.doc* %SRC%\%1\*.xsl* %SRC%\%1\*.pdf
    @set BKUPFILE=%TRG%\%1\%1-Day-%DOW%.7zippato
    @set BKUPWEEK=%TRG%\%1\%1-Week-%WEEK%.7zippato
    @set BKUPMONTH=%TRG%\%1\%1-Month-%MONTH%.7zippato

    %PRG% a -t7z "%BKUPFILE%" -r %BKUPSRC%   >>%LOG7Z%

    @if %ERRORLEVEL% == 0 (
        @echo OK;    %DATA%; %1 >>%LOGFILE%
    ) else (
        set ERRORE=!ERRORE! Errore in: %DATA%
        @echo ERROR; %DATA%; %1  >>%LOGFILE%
    )
    @if %EOW% GTR 0 copy %BKUPFILE% %BKUPWEEK%
    @if %EOM% GTR 0 copy %BKUPFILE% %BKUPMONTH%
@EXIT /B !ERRORLEVEL!

:FINE
@rem EOF Backup_QNAP_Giornalieri.bat

Per ulteriori informazioni si consiglia di leggere help set, help date ed help if dai prompt del dos
.