@echo off TITLE Quick copy from all phisical members of As400 library %~n0 into PC namesake directory and zip file. cd \ echo ALLPF.bat echo Quick copy from all phisical members of As400 library "%~n0" echo into PC namesake directory and zip file. echo . echo Copia veloce da tutti i membri fisici della libreria As400 "%~n0" echo in un indirizzario omonimo del PC e in un file zip. echo . echo Claudio Neroni 21-02-2015 Creato. echo . echo ATTENZIONE: l'estensione del presente file DEVE ESSERE ".bat". echo Il nome del presente bat viene usato come nome della libreria As400 echo dalla quale si copiano tutti i membri fisici echo in un indirizzario omonimo e radicato come il bat echo e in un file zippato pure omonimo e radicato come il bat. echo "ASSYSTEM", "MYUSER" e "MYPASSWORD" sono cablati per chiarezza e semplicita' ma per impostarli echo e' consigliabile fare uso di un altro ".bat", contenente le tre specifiche. @if .%~n0==.ALLPF @echo ERRORE! && @echo Perche' funzioni, occorre rinominare il presente bat come la libreria da copiare! && @pause && GOTO ENDPGM rem Annota Parametri utente. rem set assystem=ASSYSTEM rem set myuser=MYUSER rem set mypassword=MYPASSWORD rem Chiama batch alternativo alle tre specifiche precedenti. call J:\ACCESSOAs400.bat rem Imposta un indirizzario di lavoro. set work=WORK rem Ricava in filename il nome del file senza percorso e senza estensione. set filename=%~n0 rem Imposta un nome di lavoro. Non esistano file con queste iniziali nella libreria da elaborare. set workname=%filename% rem Ricava in filedrive il drive del file bat. set filedrive=%~d0 rem Ricava in filepath l'indirizzario del file bat. set filepath=%~p0 rem Toglie i caratteri di testa e di coda (barre). set filepath=%filepath:~1,-1% rem Compone i nomi dei file work che conterranno le istruzioni ftp da eseguire. set workftp1=C:\%WORK%\%workname%1.ftp set workftp2=C:\%WORK%\%workname%2.ftp rem Compone il nome del file work che conterra' le istruzioni sql da eseguire. set worksql=C:\%WORK%\%workname%.sql rem Compone il nome del file work di ritorno con l'elenco membri. set worktxt=C:\%WORK%\%workname%.txt rem Compone il nome del file bat per il trattamento delle righe dell'elenco membri. set workbat=C:\%WORK%\%workname%2.bat rem Compone il nome del file zip per l'output finale. set filezip=%filedrive%\%filepath%\%filename%.zip rem Compone il nome dell'indirizzario per ricevere la copia dei membri fisici. set members=%filedrive%\%filepath%\%filename% rem Crea l'indirizzario di lavoro sul disco di lavoro. mkdir C:\%WORK% rem Cancella e ricrea l'indirizzario per ricevere la copia dei membri fisici. rmdir /S /Q %members% mkdir %members% rem Cancella il file zip per l'output finale. del %filezip% rem pause debug0 rem BEG Scrive le istruzioni da eseguire con sql. rem <...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....> echo DROP TABLE %filename%/%workname%2;>%WORKSQL% echo CREATE TABLE %filename%/%workname%2 AS>>%WORKSQL% echo (SELECT MBLIB, MBFILE, MBNAME>>%WORKSQL% echo FROM %filename%/%workname%1>>%WORKSQL% echo WHERE MBFILE NOT LIKE '%filename%%%'>>%WORKSQL% echo AND MBNAME ^<^> ' ')>>%WORKSQL% echo WITH DATA;>>%WORKSQL% rem END Scrive le istruzioni da eseguire con sql. rem pause debug1 rem BEG Scrive le istruzioni del file bat per il trattamento delle righe dell'elenco membri. echo @set as=%%1>%WORKBAT% echo @set lib=%%as:~01,10%%>>%WORKBAT% echo @CALL :TRIM %%lib%% lib>>%WORKBAT% echo @set fil=%%as:~11,10%%>>%WORKBAT% echo @CALL :TRIM %%fil%% fil>>%WORKBAT% echo @set mbr=%%as:~21,10%%>>%WORKBAT% echo @CALL :TRIM %%mbr%% mbr>>%WORKBAT% echo @echo --"%%lib%%" -"%%fil%%" -"%%mbr%%">>%WORKBAT% rem Copia da membro corrente di file fisico a testo PC. echo @echo get /qsys.lib/%%lib%%.lib/%%fil%%.file/%%mbr%%.mbr %members%\%%fil%%-%%mbr%%.txt^>^>%WORKFTP2%>>%WORKBAT% rem Trimma i nomi. echo @GOTO :ENDPGM>>%WORKBAT% echo @:TRIM>>%WORKBAT% echo @SET %%2=%%1>>%WORKBAT% echo @:ENDPGM>>%WORKBAT% rem END Scrive le istruzioni del file bat per il trattamento delle righe dell'elenco membri. rem pause debug2 rem BEG Scrive le istruzioni da eseguire con primo ftp. rem Utente. echo %myuser%>%WORKFTP1% rem Password. echo %mypassword%>>%WORKFTP1% rem Elenca membri. echo quote rcmd DSPFD FILE(%filename%/*ALL) TYPE(*MBR) OUTPUT(*OUTFILE) FILEATR(*PF) OUTFILE(%filename%/%workname%1)>>%WORKFTP1% rem Crea appoggio per sql. echo quote rcmd CRTSRCPF FILE(%filename%/%workname%0) MBR(*FILE)>>%WORKFTP1% rem Copia da file PC a membro sorgente As400. echo put %WORKSQL% /qsys.lib/%filename%.lib/%workname%0.file/%workname%0.mbr>>%WORKFTP1% rem Eseque sql. echo quote rcmd RUNSQLSTM SRCFILE(%filename%/%workname%0) SRCMBR(%workname%0) COMMIT(*NONE) ERRLVL(20)>>%WORKFTP1% rem Copia da output di sql su As400 a file PC. echo get /qsys.lib/%filename%.lib/%workname%2.file/%workname%2.mbr %WORKTXT%>>%WORKFTP1% rem Abbandona ftp. echo quit>>%WORKFTP1% rem END Scrive le istruzioni da eseguire con primo ftp. rem pause debug3 rem BEG Scrive le prime istruzioni da eseguire con secondo ftp. rem Utente. echo %myuser%>%WORKFTP2% rem Password. echo %mypassword%>>%WORKFTP2% rem END Scrive le prime istruzioni da eseguire con secondo ftp. rem Documenta le variabili per controllo. rem set rem pause debug4 rem Chiama ftp per eseguire le istruzioni scritte nel primo file. ftp -s:%WORKFTP1% %assystem% rem pause debug5 rem Percorre l'elenco membri trascritto sul pc. rem Per ogni riga dell'elenco viene richiamato il bat di scrittura di una riga nel secondo ftp. FOR /F "tokens=*" %%a in (%WORKTXT%) do call %WORKBAT% "%%a " rem pause debug6 rem BEG Scrive le ultime istruzioni da eseguire con secondo ftp. rem Abbandona ftp. echo quit>>%WORKFTP2% rem END Scrive le ultime istruzioni da eseguire con secondo ftp. rem pause debug7 rem Chiama ftp per eseguire le istruzioni scritte nel secondo file. ftp -s:%WORKFTP2% %assystem% rem Cancella zippato. del %filezip% rem Zippa usando 7-zip (dopo aver copiato in C:\ il pgm 7z.exe). C:\7z a %filezip% %members%\* pause Si ferma per permettere l'esame del log prima che si chiuda la finestra comandi. rem Cancella transiti. del %WORKFTP1% del %WORKFTP2% del %WORKSQL% del %WORKTXT% del %WORKBAT% :ENDPGM