PDA

Visualizza la versione completa : [BATCH] File batch per la copia di file con indicazione di data e ora


calacausi
27-02-2012, 11:00
ciao a tutti,
devo scrivere un batch che copia i files da una cartella all'altra. Non conoscendo il linguaggio MSDOS, volevo chiedervi qualche suggerimento. In particolare, vorrei eseguire un comando di questo genere

XCOPY E:\BACKUP\DB.DMP \\[REMOTE SERVER]E$\BACKUP\CONC\DB%DataOra%.DMP /E /Y /I

dove %DataOra% deve essere una stringa del tipo ggmmaaaahhmmss.
Provando a lanciare lo script ho avuto i seguenti errori

lanciando questo comando da DOS, il sistema risponde: "Cannot perform a cyclic copy". Eliminando l'opzione /E, il comando funziona, ma devo specificare il target (file o directory)

scrivendo
SET DATAORA=%DATE%%TIME%, il comando (senza l'opzione /E) funziona, ma mi crea una serie di sottocartelle; questo problema credo sia dovuto alla presenza degli slash "/" sulle date. Come posso formattare la stringa nel formato che mi serve?
grazie per l'aiuto

oregon
27-02-2012, 11:14
Prova con

SET DATAORA=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0, 2%%time:~3,2%%time:~6,2%%time:~9,2%

Lo switch /E serve a copiare directory e sottodirectory, ma tu stai copiando un file ... a cosa ti serve?

calacausi
27-02-2012, 11:47
Originariamente inviato da oregon
Prova con

SET DATAORA=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0, 2%%time:~3,2%%time:~6,2%%time:~9,2%

Lo switch /E serve a copiare directory e sottodirectory, ma tu stai copiando un file ... a cosa ti serve?

ciao,
il dataora funziona, grazie.
L'opzione /E l'ho copiata da uno script di esempio. Pensavo servisse per saltare il prompt che ti chiede di specificare il formato (file o directory).
Credo ci siano problemi di diritti sulla macchina. Ho provato lo stesso comando da due server diversi, puntando allo stesso server di destinazione. In uno il comando funziona con l'opzione /E, ma solo se la cartella di destinazione in locale. Se invece provo a copiare sul server remoto, mi chiede di specificare un nome di file o directory.
Provando lo stesso comando da un'altra macchina, la copia verso il server remoto non funziona. O meglio; il file viene copiato, ma quando esco dal batch, sparisce.

oregon
27-02-2012, 11:52
Forse non mi sono spiegato ... il /E non devi proprio usarlo per la copia di un file.

calacausi
27-02-2012, 12:12
Originariamente inviato da oregon
Forse non mi sono spiegato ... il /E non devi proprio usarlo per la copia di un file.

ti sei spiegato bene :)
ho sostituito XCOPY con COPY (con opzioni /Y /B). Le copie vengono fatte, ma lo script non si chiude. Ho messo il comando EXIT ma non funziona. Come faccio a catturare gli errori e stamparli in un file di log?

oregon
27-02-2012, 14:09
Mostra lo script ...

Non pensare di poter chiedere tanto ad uno script batch ... non un vero e proprio linguaggio di programmazione ...

Se ti serve molto altro, passa ad un vero linguaggio ...

calacausi
27-02-2012, 15:16
Originariamente inviato da oregon
Mostra lo script ...

Non pensare di poter chiedere tanto ad uno script batch ... non un vero e proprio linguaggio di programmazione ...

Se ti serve molto altro, passa ad un vero linguaggio ...

ecco lo script


ECHO OFF
SET DATA=%DATE%
SET ORA=%TIME%
SET DataOra=%DATA:~4,2%%DATA:~7,2%%DATA:~10,4%%ORA:~0, 2%%ORA:~3,2%
SET FILELOG=log_%DATA:~4,2%%DATA:~7,2%%DATA:~10,4%.log
SET SCHEMA1_FROM= E:\BACKUP\SCHEMA1\SCHEMA1.DMP
SET SCHEMA1_LOC_DEST= E:\BACKUP\SCHEMA1\OLD\SCHEMA1_%DATAORA%.DMP
SET SCHEMA1_REM_DEST= G:\SCHEMA1\SCHEMA1_%DATAORA%.DMP

SET SCHEMA2_FROM= E:\BACKUP\SCHEMA2\SCHEMA2.DMP
SET SCHEMA2_LOC_DEST= E:\BACKUP\SCHEMA2\OLD\SCHEMA2_%DATAORA%.DMP
SET SCHEMA2_REM_DEST= G:\SCHEMA2\SCHEMA2_%DATAORA%.DMP

SET SCHEMA3_FROM= E:\BACKUP\SCHEMA3\SCHEMA3.DMP
SET SCHEMA3_LOC_DEST= E:\BACKUP\SCHEMA3\OLD\SCHEMA3_%DATAORA%.DMP
SET SCHEMA3_REM_DEST= G:\SCHEMA3\SCHEMA3_%DATAORA%.DMP

REM BACKUP SCHEMA1
ECHO BACKUP SCHEMA 1 >> %FILELOG% 2>&1
COPY %SCHEMA1_FROM% %SCHEMA1_LOC_DEST% /B /Y >> %FILELOG% 2>&1

REM BACKUP SCHEMA2
ECHO BACKUP SCHEMA 2 >> %FILELOG% 2>&1
COPY %SCHEMA2_FROM% %SCHEMA2_LOC_DEST% /B /Y >> %FILELOG% 2>&1

REM BACKUP SCHEMA3
ECHO BACKUP SCHEMA 3 >> %FILELOG% 2>&1
COPY %SCHEMA3_FROM% %SCHEMA3_LOC_DEST% /B /Y >> %FILELOG% 2>&1

REM BACKUP SCHEMA1 SU SERVER REMOTO
ECHO BACKUP SCHEMA1 SU REMOTO >> %FILELOG% 2>&1
COPY %SCHEMA1_FROM% %SCHEMA1_REM_DEST% /B /Y >> %FILELOG% 2>&1

REM BACKUP SCHEMA2 SU SERVER REMOTO
ECHO BACKUP SCHEMA2 SU REMOTO >> %FILELOG% 2>&1
COPY %SCHEMA2_FROM% %SCHEMA2_REM_DEST% /B /Y >> %FILELOG% 2>&1

REM BACKUP SCHEMA3 SU SERVER REMOTO
ECHO BACKUP SCHEMA3 SU REMOTO >> %FILELOG% 2>&1
COPY %SCHEMA3_FROM% %SCHEMA3_REM_DEST% /B /Y >> %FILELOG% 2>&1

EXIT


La cartella G: un'unit di rete collegata al server remoto.
la copia sulle cartelle locali (da SCHEMA_FROM a SCHEMA_LOC_DEST) funziona.
Quando faccio le copie verso server remoto (da SCHEMA_FROM a SCHEMA_REM_DEST), la prima funziona; la seconda anche, ma blocca lo script.

Loading