Discussione:
backup batch per Win2000
(troppo vecchio per rispondere)
OT
2006-04-23 16:43:58 UTC
Permalink
ciao a tutti,
vorrei usare un semplicissimo batch per mantenere una copia locale
aggiornata (su un pc Win2000 Prof) di alcune cartelle disponibili su un
server.

Finora ho risolto così:
1) prima faccio apro il percorso \\server\dir , inserendo le credenziali
necessarie per accedere al percorso (della forma Dominio\utente + password)
2) lancio un bat, che contiene una lunga serie di comandi del tipo:
xcopy "\\server\dir\*.*" "c:\copia\dir\*.*" /S /D /Y /V /Q

e tutto funziona benissimo, mi chiedevo però:
1) se e come è possibile cancellare da c:\copia\dir i files non più
presenti sul server (so che dovrei usare un qualche loop, ma non sono
riuscito a capire come)
2) se è possibile far fare il login su \\server ad un comando batch
(attualmente, se prima non faccio login a mano su \\server non funziona
neanche il semplicissimo comando "start \\server")

Grazie mille per ogni risposta!

andre
Roberto Mariottini
2006-04-26 09:46:47 UTC
Permalink
OT ha scritto:

[...]
Post by OT
1) se e come è possibile cancellare da c:\copia\dir i files non più
presenti sul server (so che dovrei usare un qualche loop, ma non sono
riuscito a capire come)
Non so se funziona con Windows 2000, io ho provato solo con XP.

Metti questo testo in un file di nome CANCELLA.BAT:

--------------
@echo off
setlocal enabledelayedexpansion

rem Calcola la lunghezza della directory corrente
set CURRENT=%CD%
set LENGTH=0
:loop
if "%CURRENT%"=="" goto endloop
set /A LENGTH = LENGTH + 1
set CURRENT=%CURRENT:~1%
goto loop
:endloop
set /A LENGTH = LENGTH + 1

rem Ciclo di cancellazioni
for /r %%I in (*) do (
set F=%%I
echo if not exist \\server\dir\!F:~%LENGTH%! del %%I
)
--------------

poi lo chiami da dentro C:\copia\dir.
Per cancellare davvero devi togliere 'echo'. Io però prima proverei, non
vorrei che cancellasse dati importanti.
Non capita, ma se capita...
Post by OT
2) se è possibile far fare il login su \\server ad un comando batch
(attualmente, se prima non faccio login a mano su \\server non funziona
neanche il semplicissimo comando "start \\server")
net use Z: \\server\dir password /USER:utente

Per altre informazioni:

net help use
Post by OT
Grazie mille per ogni risposta!
Prego, ciao

---
http://www.mariottini.net/roberto/
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
OT
2006-04-26 19:58:24 UTC
Permalink
Post by Roberto Mariottini
[...]
Post by OT
1) se e come è possibile cancellare da c:\copia\dir i files non più
presenti sul server (so che dovrei usare un qualche loop, ma non sono
riuscito a capire come)
Non so se funziona con Windows 2000, io ho provato solo con XP.
--------------
@echo off
setlocal enabledelayedexpansion
rem Calcola la lunghezza della directory corrente
set CURRENT=%CD%
set LENGTH=0
:loop
if "%CURRENT%"=="" goto endloop
set /A LENGTH = LENGTH + 1
set CURRENT=%CURRENT:~1%
goto loop
:endloop
set /A LENGTH = LENGTH + 1
rem Ciclo di cancellazioni
for /r %%I in (*) do (
set F=%%I
echo if not exist \\server\dir\!F:~%LENGTH%! del %%I
)
--------------
poi lo chiami da dentro C:\copia\dir.
Per cancellare davvero devi togliere 'echo'. Io però prima proverei, non
vorrei che cancellasse dati importanti.
Non capita, ma se capita...
Purtroppo non funziona: il file .bat cancella se stesso!
ci ho messo una pezza dandogli lo stesso nome di un file .bat che
fortunatamente è sul server, ma così facendo non posso usare questa
soluzione per altre cartelle e/o altri server... e poi ho aggiunto delle
tristemente necessarie virgolette:

--------------
...
rem Ciclo di cancellazioni
for /r %%I in (*) do (
set F=%%I
if not exist "\\server\dir\!F:~%LENGTH%!" del "%%I"
)
--------------

solo, non ho capito a cosa serve il parametro %LENGTH%... le virgolette
non bastano?
Post by Roberto Mariottini
Post by OT
2) se è possibile far fare il login su \\server ad un comando batch
(attualmente, se prima non faccio login a mano su \\server non funziona
neanche il semplicissimo comando "start \\server")
net use Z: \\server\dir password /USER:utente
purtroppo mi da errore:
Errore di sistema 67
Impossibile trovare il nome della rete !?
Roberto Mariottini
2006-04-27 08:32:15 UTC
Permalink
OT ha scritto:

[...]
Post by OT
Purtroppo non funziona: il file .bat cancella se stesso!
Sono cose che capitano, peccato, a parte questo il resto va? :-)
Post by OT
ci ho messo una pezza dandogli lo stesso nome di un file .bat che
fortunatamente è sul server, ma così facendo non posso usare questa
soluzione per altre cartelle e/o altri server...
Conviene che il file .bat in questione risieda da qualche altra parte. Per
esempio lo metti in C:\varie e lo richiami usando il nome completo:

C:\varie\file.bat
Post by OT
e poi ho aggiunto delle
--------------
...
rem Ciclo di cancellazioni
for /r %%I in (*) do (
set F=%%I
if not exist "\\server\dir\!F:~%LENGTH%!" del "%%I"
)
--------------
Certo, se hai dei nomi di file con spazi.
Post by OT
solo, non ho capito a cosa serve il parametro %LENGTH%... le virgolette
non bastano?
Non so su Windows 2000, ma su XP quel @#!@# di comando FOR mi restituisce
il nome completo del file. Per cui quando espande %%I mi dà
"C:\miadir\altradir\miofile.ext", ed io devo rimuovere "C:\miadir\" da
davanti ed ottenere "altradir\miofile.ext", in modo da concatenarlo a
"\\server\dir\" ed ottenere finalmente "\\server\dir\altradir\miofile.ext".
La variabile LENGTH (la lunghezza di "C:\miadir\" che calcolo all'inizio)
serve a questo.
Post by OT
Post by Roberto Mariottini
2) se è possibile far fare il login su \server ad un comando batch
(attualmente, se prima non faccio login a mano su \server non funziona
neanche il semplicissimo comando "start \server")
net use Z: \\server\dir password /USER:utente
Errore di sistema 67
Impossibile trovare il nome della rete !?
Probabilmente sei su un dominio. Prova a vedere le opzioni disponibili con:

net help use

e smanetta un po' coi vari modi di specificare un dominio.

Ciao
---
http://www.mariottini.net/roberto/
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
OT
2006-05-02 06:27:35 UTC
Permalink
Post by Roberto Mariottini
[...]
Post by OT
Purtroppo non funziona: il file .bat cancella se stesso!
Sono cose che capitano, peccato, a parte questo il resto va? :-)
Post by OT
ci ho messo una pezza dandogli lo stesso nome di un file .bat che
fortunatamente è sul server, ma così facendo non posso usare questa
soluzione per altre cartelle e/o altri server...
Conviene che il file .bat in questione risieda da qualche altra parte. Per
C:\varie\file.bat
Post by OT
e poi ho aggiunto delle
--------------
...
rem Ciclo di cancellazioni
for /r %%I in (*) do (
set F=%%I
if not exist "\\server\dir\!F:~%LENGTH%!" del "%%I"
)
--------------
Certo, se hai dei nomi di file con spazi.
Post by OT
solo, non ho capito a cosa serve il parametro %LENGTH%... le virgolette
non bastano?
il nome completo del file. Per cui quando espande %%I mi dà
"C:\miadir\altradir\miofile.ext", ed io devo rimuovere "C:\miadir\" da
davanti ed ottenere "altradir\miofile.ext", in modo da concatenarlo a
"\\server\dir\" ed ottenere finalmente "\\server\dir\altradir\miofile.ext".
La variabile LENGTH (la lunghezza di "C:\miadir\" che calcolo all'inizio)
serve a questo.
Post by OT
Post by Roberto Mariottini
2) se è possibile far fare il login su \server ad un comando batch
(attualmente, se prima non faccio login a mano su \server non funziona
neanche il semplicissimo comando "start \server")
net use Z: \\server\dir password /USER:utente
Errore di sistema 67
Impossibile trovare il nome della rete !?
net help use
e smanetta un po' coi vari modi di specificare un dominio.
Ciao
---
http://www.mariottini.net/roberto/
Ho fatto prove e riprove... ed ora funziona *quasi* tutto!

Rimane solo un problema: se un file contiene dei punti esclamativi nel
nome (ad esempio \\server\dir\Leggimi!.txt), il file stesso viene
copiato correttamente dal comando xcopy come C:\miadir\Leggimi!.txt MA
il ciclo for che dovrebbe controllare l'esistenza del file sul server
manifesta l'errore
"impossibile trovare C:\miadir\Leggimi.txt"
...in pratica vengono tagliati i punti esclamativi dai nomi dei file!

Oltre a questo, manca solo una cosa per avere la "perfezione": il for
cancella i file locali di cui non ci sia più traccia sul server ma
lascia intatta la sttuttura delle cartelle.
Come faccio a cancellare le cartelle che non esistono più sul server,
oppure tutte le sottocartelle *vuote* di c:\miadir ?

io pensavo che una cosa del genere dovrebbe funzionare:
-----------
cd \miadir
for /r /d %I in (*) do (
if %~zI == 0 RmDir %I /S /Q
)
----------

ancora grazie!
andre
Roberto Mariottini
2006-05-02 07:51:42 UTC
Permalink
OT ha scritto:

[...]
Post by OT
Ho fatto prove e riprove... ed ora funziona *quasi* tutto!
Benone!
Post by OT
Rimane solo un problema: se un file contiene dei punti esclamativi nel
nome (ad esempio \\server\dir\Leggimi!.txt), il file stesso viene
copiato correttamente dal comando xcopy come C:\miadir\Leggimi!.txt MA
il ciclo for che dovrebbe controllare l'esistenza del file sul server
manifesta l'errore
"impossibile trovare C:\miadir\Leggimi.txt"
....in pratica vengono tagliati i punti esclamativi dai nomi dei file!
Azz! Qui i limiti del povero CMD sono oltrepassati. Non ho idea di come
fare e non so se sia possibile farlo.
Forse mettendo due punti esclamativi te li vede come uno solo (lo fa per
esempio con %%), ma non so se valga la pena di complicare ulteriormente
qualcosa di già complicato.

Prova a convivere con il problema, del resto, non si può avere tutto dalla
vita.
Post by OT
Oltre a questo, manca solo una cosa per avere la "perfezione": il for
cancella i file locali di cui non ci sia più traccia sul server ma
lascia intatta la sttuttura delle cartelle.
Come faccio a cancellare le cartelle che non esistono più sul server,
oppure tutte le sottocartelle *vuote* di c:\miadir ?
-----------
cd miadir
for /r /d %I in (*) do (
if %~zI == 0 RmDir %I /S /Q
)
----------
Per le cartelle che non esistono sul server fai la stessa cosa che fai coi
file ma utilizzando il FOR /D.

Per le cartelle vuote prova così:
---------
@echo off
setlocal enabledelayedexpansion

for /R /D %%D in (*) do (
set CE=
for %%F in (%%D\*) do set CE=1
if not "!CE!"=="1" echo La directory %%D è vuota
)
---------
Post by OT
ancora grazie!
Prego.

Ciao
---
http://www.mariottini.net/roberto/
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
OT
2006-05-02 17:12:44 UTC
Permalink
Post by Roberto Mariottini
[...]
Post by OT
Ho fatto prove e riprove... ed ora funziona *quasi* tutto!
Benone!
Post by OT
Rimane solo un problema: se un file contiene dei punti esclamativi nel
nome (ad esempio \\server\dir\Leggimi!.txt), il file stesso viene
copiato correttamente dal comando xcopy come C:\miadir\Leggimi!.txt MA
il ciclo for che dovrebbe controllare l'esistenza del file sul server
manifesta l'errore
"impossibile trovare C:\miadir\Leggimi.txt"
....in pratica vengono tagliati i punti esclamativi dai nomi dei file!
Azz! Qui i limiti del povero CMD sono oltrepassati. Non ho idea di come
fare e non so se sia possibile farlo.
Forse mettendo due punti esclamativi te li vede come uno solo (lo fa per
esempio con %%), ma non so se valga la pena di complicare ulteriormente
qualcosa di già complicato.
Prova a convivere con il problema, del resto, non si può avere tutto dalla
vita.
Penso che conviverò con il problema, soprattutto perché ci sono diversi
file che hanno un numero diverso di punti esclamativi distribuiti nel
nome... certa gente è troppo "esuberante" nel battezzare i propri lavori
:-)

BTW, quali sono gli altri caratteri che possono provocare problemi di
questo tipo? Così evito di usarli!

Con questo dovrei finire di tormentarti.
Ancora GRAZIE !

Continua a leggere su narkive:
Loading...